gle*_*enc 4 iphone core-data objective-c nsmanagedobject
我在我的应用程序中的一个模型上实现了如下的瞬态属性.它在模型设计中声明为具有未定义类型的瞬态属性.
@property (nonatomic, readonly) NSNumberFormatter *currencyFmt;
Run Code Online (Sandbox Code Playgroud)
此访问器的当前(无警告)impl是:
- (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;
}
Run Code Online (Sandbox Code Playgroud)
调用primitiveValueForKey:是这里的问题,因为文档特别警告不要使用这个版本的原语查找:
强烈建议您使用动态生成的访问器而不是直接使用此方法(例如,primitiveName:而不是primitiveValueForKey:@"name").动态访问器更高效,并允许编译时检查.
问题是,如果我尝试使用primitiveCurrencyFmt而不是primitiveValueForKey:@"currencyFmt",我得到一个编译器警告说该对象可能不响应该选择器.如果我只是忽略这个警告,那么在运行时一切正常,但是警告很糟糕,而且我不想提交任何包含它们的代码.
我试着声明属性与@dynamic和@synthesize在文件的顶部,似乎没有任何帮助.在不生成这些警告的情况下,我需要做什么才能使用推荐的动态访问器?
任何帮助非常感谢.
在托管对象类的类别中声明方法:
@interface MyManagedObject : NSManagedObject
...
@end
@interface MyManagedObject (PrimitiveAccessors)
- (NSNumberFormatter*)primitiveCurrencyFmt;
- (void)setPrimitiveCurrencyFmt:(NSNumberFormatter*)value;
@end
Run Code Online (Sandbox Code Playgroud)
Apple在文档中的几个位置使用此模式来禁止编译器警告.
| 归档时间: |
|
| 查看次数: |
204 次 |
| 最近记录: |