gpt4 book ai didi

objective-c - objective-c - 制作一个 NSManagedObject 和从同一父类继承的常规 NSObject 类

转载 作者:太空狗 更新时间:2023-10-30 03:59:38 25 4
gpt4 key购买 nike

在我的 iPhone 应用程序中,我有两个 View Controller :viewController1 有一个显示 Item1 对象列表的 tableViewviewController2 有一个显示 Item2 对象列表的 tableView

其中Item1类和Item2类继承自抽象类ParentItem。

现在我想让 Item2 对象成为一个 NSManagedObject,这样我就可以将它保存在设备上,并让 viewController2 使用 NSFetchedResultsController 来加载它的带有 Item2 对象的 tableView。

但我不希望 Item1 成为 NSManagedObject,我想将它用作常规对象。

问题是,如果我将 ParentItem 类创建为 NSManagedObject,那么 Item1 类也将是一个 NSManagedObject,我不能将它用作常规对象(我的意思是我将无法使用常规 alloc-init 创建 Item1 对象,或者我可以吗???)

如果我将 ParentItem 类创建为常规 NSObject,那么 Item2 类也将是常规 NSObject。

最佳答案

您最有可能需要的是两个类都可以实现的接口(interface)。我将使用一个人的例子:

@protocol PersonInterface <NSObject>

@property (nonatomic, copy) NSString *firstName;
@property (nonatomic, copy) NSString *lastName;

@end

继承自 NSObject 的类

@interface NonManagedPerson : NSObject <PersonInterface>
@end

@implementation NonManagedPerson

@synthesize firstName = _firstName;
@synthesize lastName = _lastName;

@end

继承自 NSManagedObject 的类

@interface ManagedPerson : NSManagedObject <PersonInterface>
@end

@implementation ManagedPerson

@dynamic firstName;
@dynamic lastName;

@end

现在如果一个对象需要使用这些类中的任何一个,它不关心它的父类(super class)型是什么,它只关心对象响应 -firstName , -lastName , -setFirstName-setLastName .

为了实现这种灵 active ,您需要确保要使用的对象符合接口(interface),因为您不再为特定类型而烦恼,例如:

@interface FootballClub : NSObject

@property (nonatomic, retain) id<PersonInterface> clubManager;

// .. other properties

@end

更新

要获得共享实现,您可以考虑组合/委托(delegate)。

组成

您创建了另一个封装通用工作的类,然后将其作为可用的 ivar 在您的类中使用。

委派

和其他普通元素一样做,比如UITableView .在某些时候它会调用它的 datasource (实现 <UITableViewDatasource> 所需方法的任何元素)请求完成某事。然后,您可以让两个对象使用同一个类作为数据源,并且实现将共享。

关于objective-c - objective-c - 制作一个 NSManagedObject 和从同一父类继承的常规 NSObject 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8869660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com