我在我的应用程序中的一个模型上实现了如下所示的瞬态属性。它在模型设计中被声明为具有未定义类型的瞬态属性。
@property (nonatomic, readonly) NSNumberFormatter *currencyFmt;
该访问器的当前(无警告)实现是:
- (NSNumberFormatter *) currencyFmt
{
[self willAccessValueForKey:@"currencyFmt"];
NSNumberFormatter *fmt = [self primitiveValueForKey:@"currencyFmt"];
[self didAccessValueForKey:@"currencyFmt"];
if (fmt == nil)
{
fmt = [[[NSNumberFormatter alloc] init] autorelease];
[fmt setNumberStyle:NSNumberFormatterCurrencyStyle];
[fmt setLocale:[self localeObject]];
[self setPrimitiveValue:fmt forKey:@"currencyFmt"];
}
return fmt;
}
致电给primitiveValueForKey:
是这里的问题,因为文档 http://developer.apple.com/library/mac/#documentation/cocoa/Reference/CoreDataFramework/Classes/NSManagedObject_Class/Reference/NSManagedObject.html特别警告不要使用此版本的原始查找:
强烈建议您使用
而是动态生成的访问器
比直接使用此方法(对于
例如,primitiveName:而不是
PrimitiveValueForKey:@“名称”)。这
动态访问器更多
高效,并允许编译时间
检查。
问题是如果我尝试使用primitiveCurrencyFmt
代替primitiveValueForKey:@"currencyFmt"
,我收到编译器警告,指出该对象可能不会响应该选择器。如果我忽略这个警告,那么在运行时一切都会正常工作,但是警告很可怕,我不想提交任何包含它们的代码。
我尝试用以下方式申报财产@dynamic
and @synthesize
在文件的顶部,似乎没有任何帮助。我需要做什么才能使用推荐的动态访问器而不生成这些警告?
非常感谢任何帮助。
在托管对象类的类别中声明方法:
@interface MyManagedObject : NSManagedObject
...
@end
@interface MyManagedObject (PrimitiveAccessors)
- (NSNumberFormatter*)primitiveCurrencyFmt;
- (void)setPrimitiveCurrencyFmt:(NSNumberFormatter*)value;
@end
Apple 在文档中的多个位置使用此模式来抑制编译器警告。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)