目标-C类别问题

时间:2015-02-26 04:39:14

标签: ios core-data nsmanagedobject objective-c-runtime objective-c-category

我有两个NSManagedObject子类 我正在为NSManagedObject表示JSON添加类别方法,因此我将此类别命名为NSManagedObject+JSON

NSManagedObject+JSON.m中实施类别方法:

- (NSDictionary *)JSONToCreateObjectOnServer {
@throw [NSException exceptionWithName:@"JSONStringToCreateObjectOnServer Not Overridden" reason:@"Must override JSONStringToCreateObjectOnServer on NSManagedObject class" userInfo:nil];
return nil;
}

我正在关注Ray Weinderleich教程:http://www.raywenderlich.com/17927/how-to-synchronize-core-data-with-a-web-service-part-2

它说: 这里的问题是这种方法没有可能的通用实现。所有NSManagedObject子类都必须通过覆盖它来实现此方法。

每当NSManagedObject子类未实现此方法时,将抛出异常。

我的问题: 我已将类别中的方法添加到我的子类中。但我的代码不调用我的NSManagedObject子类中的方法而是调用类别并抛出异常。

这里缺少什么? 任何人都可以指出其背后的原因吗?

编辑1:

- (NSDictionary *)JSONToCreateObjectOnServer {
NSDictionary *date = [NSDictionary dictionaryWithObjectsAndKeys:
                      @"Date", @"__type",
                      [[SDSyncEngine sharedEngine] dateStringForAPIUsingDate:self.date], @"iso" , nil];

NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                                self.name, @"name",
                                self.details, @"details",
                                self.wikipediaLink, @"wikipediaLink",
                                date, @"date", nil];    
return jsonDictionary;

}

这是我添加到NSManagedObject类的方法。

我已经复制并粘贴了它。是它的becoz或我必须遵循另一个过程向NSManagedObject类添加方法。

1 个答案:

答案 0 :(得分:2)

创建类别用于展开,而不是用于覆盖或修改。所以我们无法保证它是否会覆盖或被覆盖。

在您的情况下,您应该创建一个子类NSManagedObject,而不是使用Category。然后将下面的方法放到父类。

- (NSDictionary *)JSONToCreateObjectOnServer {
   @throw [NSException exceptionWithName:@"JSONStringToCreateObjectOnServer Not Overridden" reason:@"Must override JSONStringToCreateObjectOnServer on NSManagedObject class" userInfo:nil];
   return nil;
}

另一个类将子类化您的父类而不是NSManagedObject。

P / S:你应该使用NSAssert而不是throw。

参考文献: