财产拒绝合成

Kaj*_*aji 0 cocoa properties objective-c instance-variables

我一直在浏览这里的截屏视频,学习如何编写基于表格的iPhone应用程序,到目前为止它一直很顺利.现在我正处于第三集的中途,它开始遇到障碍.

为了删除表的顶层的临时硬编码,本教程NSMutableDicitonary为所有条目及其数据创建一个,然后NSArray使用该forKeys语句创建一个数组,只需要在表格单元格中显示的词条.

我遇到的问题是数组的变量拒绝合成.

违规变量在AppDelegate.h文件中定义,其余属性如下:

@property (readonly) NSArray *recipes;
Run Code Online (Sandbox Code Playgroud)

然后在AppDelegate.m文件中合成并实现如下:

@synthesize recipes;

- (NSArray *)recipes {
    return [data allKeys];
}
Run Code Online (Sandbox Code Playgroud)

我询问了截屏视频的作者,他建议如下AppDelegate.h:

@class Foo :NSObject {
    NSArray *_recipes;
}

@property(nonatomic, retain)NSArray *recipes;

@end
Run Code Online (Sandbox Code Playgroud)

这个用于AppDelegate.m:

@implementation Foo

@synthesize recipes = _recipes;

@end
Run Code Online (Sandbox Code Playgroud)

我试过这个方法,但它创造了比以前更多的错误.是什么让这个变量定义与任何其他@property不同,我怎样才能使它表现出来?

bbu*_*bum 11

@property"仅仅"是方法声明的简写. @dynamic意味着您将在运行时动态提供实现,这是一种非典型的高级使用模式.

从而:

@property (readonly) NSArray *recipes;
Run Code Online (Sandbox Code Playgroud)

是,在标题中,简写为:

- (NSArray *) recipes;
Run Code Online (Sandbox Code Playgroud)

@synthesize recipes;将综合@property声明所隐含的方法.不多也不少.由于有人提到它,@synthesize recipes=_recipes;将合成方法,但使用实例变量_recipes进行存储(而不是recipes).

如果您实现自己的getter(因为这只是一个getterly,只有一个getter),形式如下:

- (NSArray *) recipes {
    return ....;
}
Run Code Online (Sandbox Code Playgroud)

再有就是不需要任何@synthesize@dynamic.