iphone – 无法摆脱瞬态属性getter impls中的primitiveValue访问器的编译器警告

我在我的应用程序中的一个模型上实现了如下的瞬态属性.它在模型设计中声明为具有未定义类型的瞬态属性.

@property (nonatomic, readonly) NSNumberFormatter *currencyFmt;

此访问器的当前(无警告)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;
}

对primitiveValueForKey:的调用是这里的问题,因为documentation特别警告不要使用这个版本的原语查找:

You are strongly encouraged to use the
dynamically-generated accessors rather
than using this method directly (for
example, primitiveName: instead of
primitiveValueForKey:@”name”). The
dynamic accessors are much more
efficient, and allow for compile-time
checking.

问题是,如果我尝试使用primitiveCurrencyFmt而不是primitiveValueForKey:@“currencyFmt”,我会收到编译器警告,说明该对象可能没有响应该选择器.如果我只是忽略这个警告,那么在运行时一切正常,但是警告很糟糕,而且我不想提交任何包含它们的代码.

我尝试使用@dynamic和@synthesize在文件顶部声明属性,似乎没有任何帮助.在不生成这些警告的情况下,我需要做什么才能使用推荐的动态访问器?

任何帮助非常感谢.

在托管对象类的类别中声明方法:

@interface MyManagedObject : NSManagedObject
...
@end

@interface MyManagedObject (PrimitiveAccessors)

- (NSNumberFormatter*)primitiveCurrencyFmt;
- (void)setPrimitiveCurrencyFmt:(NSNumberFormatter*)value;

@end

Apple在文档中的几个位置使用此模式来禁止编译器警告.

相关文章
相关标签/搜索