1

我有一个使用核心数据的 iOS 应用程序。我已经建立了我的NSManagedObjectModel. 我在那里有一个 NEOrder 实体。我已经生成了 NSManagedObject 子类。

@interface NEOrder : NSManagedObject

@property //....

@end

我有一个 UIViewController 的子类。这需要具有 NEOrder 类型的实例变量。但我希望它表现得像一个常见的自定义对象:

@interface NEOrder : NSObject

@property //....

@end

当然,它可以通过创建另一个 .h 和 .m 文件来完成,其中声明 NEOrder_ 子类化 NSObject 。但是这个文件会非常类似于核心数据生成的 NSObjectModels,除了 @synthesize/@dynamic 和 init 方法。我不想做两次工作。请帮帮我,怎么办?

如果我将 init 添加到生成的 NEOrder 应用程序会崩溃:

-(id)init
{
    if (self=[super init])
    {
        self.name=[[NSString alloc] init];
        self.phone=[[NSString alloc] init];
        self.weight=[[NSNumber alloc] init];
        self.fromDirection=[[NEDirection alloc] init];
        self.toDirection=[[NEDirection alloc] init];
    }
    return self;
}

还有几句话是关于我想如何使用它的。

//NEOrder *order is an instance of view controller
self.order=[NEOrder alloc] init]
//...
self.order.name=@"order name";
self.order.phone=@"12344321";

是否可以?或者我必须为此创建一个单独的 NSObject 子类?

4

3 回答 3

2

您的问题的一部分没有意义:

我希望它表现得像一个常见的自定义对象。

你什么意思?

您的问题的其余部分表明您需要一个NEOrder类,并且您应该像这样设置视图控制器:

MyViewController.h:

@class NEOrder;

@interface MyViewController : UIViewController

@property (strong) NEOrder *order;

@end

MyViewController.m:

#include "NEOrder.h"

@implementation MyViewController

...

@end
于 2012-11-09T17:31:16.467 回答
1

所有的类都继承自 NSObject,所以 NSManagedObject 也继承自 NSObject。这意味着您的 NEOrder 对象将具有 NSObject 的所有特征。

于 2012-11-09T17:31:32.457 回答
1

使用类别。类别可用于为实际类之外的类编写方法。我将它们与 Core Data 模型一起使用,因此当我出于任何原因需要重新生成 NSManagedObjectModel 时,我会保留这些方法。

于 2012-11-09T17:31:46.953 回答