NSInteger,NSNumber"属性'x'带'保留'属性必须是对象类型"

Alo*_*lok 30 iphone

我正在处理一个从sqlite数据库填充数据的应用程序.所有与数据库相关的东西都在appdelegate课堂上完成.我用NSMutable数组来保存对象.我已经NSObject为属性使用了一个单独的类.

我收到错误:property 'x' with 'retain' attribute must be of object type.

我的appdelegate.m文件代码如下:

NSString *amovieName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];
NSInteger amovieId = sqlite3_column_int(compiledStatement, 1);
//problem is here the 
//value of movieId is coming from database.
//But error: "must be of object type" is puzzling me. 
//I am assuming to use NSNumber here.
Run Code Online (Sandbox Code Playgroud)

我的NSObject文件的代码如下:

在.h文件中 -

NSInteger movieId;
Run Code Online (Sandbox Code Playgroud)

其财产如下:

@property (nonatomic, retain) NSInteger movieId;
Run Code Online (Sandbox Code Playgroud)

并在.m文件中 -

@synthesize movieId; 
Run Code Online (Sandbox Code Playgroud)

然后我刚刚初始化为:

-(id)initWithmovieName:(NSString *)mN movieId:(NSInteger)mId 
{    
    self.movieName=mN;  
    self.movieId=mId;  
    return self;  
}
Run Code Online (Sandbox Code Playgroud)

我找到了另一种方法:在NSnumber对象中赋值.然后在NSInteger.for ex中输入caste;

NSNumber aNSNumbermovieID = sqlite3_column_int(compiledStatement, 1); 
            NSInteger amovieId = [aNSNumbermovieID integerValue];
Run Code Online (Sandbox Code Playgroud)

但我仍然得到相同的错误(属性'x'与'retain'属性必须是对象类型).

有什么建议吗?

McC*_*nus 93

NSInteger是标量而不是对象.所以你不应该保留它,它应该被分配.更改您的属性将清除警告消息.您不需要执行添加的NSNumber内容.

@property (nonatomic, assign) NSInteger movieId;
Run Code Online (Sandbox Code Playgroud)

这有点令人困惑,因为NSInteger听起来像一个类,但它只是int的typedef.Apple将其作为64位支持的一部分引入,以便他们可以为编译代码的处理器将其定义为适当大小的整数.


Hon*_*rny 9

只需使用NSNumber,你可以做:

@property (nonatomic, retain) NSNumber *movieId;
Run Code Online (Sandbox Code Playgroud)


vis*_*kh7 7

我认为错误是因为@ property retainfor NSInteger. Assign是原始值,如BOOL,NSIntegerdouble.对于对象使用retaincopy,取决于您是否要保留对原始对象的引用或制作它的副本.

NSInteger显然不是一个对象所以你应该尝试assign而不是保留