我有两个 NSManagedObject
子类。
我正在向 NSManagedObject
添加一个类别方法用于 JSON
表示,因此我将此类别命名为 NSManagedObject+JSON
。
实现NSManagedObject+JSON.m
中的category方法:
- (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 类中的方法。
我已经复制粘贴了。是因为那个还是我必须按照另一个过程将方法添加到 NSManagedObject 类。
最佳答案
创建类别是为了扩展,而不是为了覆盖或修改。所以我们无法确定它是否覆盖或被覆盖。
在你的例子中,你应该创建一个父类,而不是使用类别,它是 NSManagedObject 的子类。然后把下面的方法放到父类中。
- (NSDictionary *)JSONToCreateObjectOnServer {
@throw [NSException exceptionWithName:@"JSONStringToCreateObjectOnServer Not Overridden" reason:@"Must override JSONStringToCreateObjectOnServer on NSManagedObject class" userInfo:nil];
return nil;
}
另一个类将继承你的父类而不是 NSManagedObject。
P/S:你应该使用 NSAssert 而不是 throw。
引用资料:
关于ios - Objective -C 类问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28734592/