我正在处理一个从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.
我的NSObject文件的代码如下:
在.h文件中 -
NSInteger movieId;
其财产为:
@property (nonatomic, retain) NSInteger movieId;
和.m文件 -
@synthesize movieId;
然后我刚刚初始化为:
-(id)initWithmovieName:(NSString *)mN movieId:(NSInteger)mId
{
self.movieName=mN;
self.movieId=mId;
return self;
}
我找到另一种方式: 在NSnumber对象中指定值。然后在NSInteger.for ex;
中键入casteNSNumber aNSNumbermovieID = sqlite3_column_int(compiledStatement, 1);
NSInteger amovieId = [aNSNumbermovieID integerValue];
但我仍然得到相同的错误(属性'x','retain'属性必须是对象类型)。
有什么建议吗?
答案 0 :(得分:93)
NSInteger是标量而不是对象。所以你不应该保留它,它应该被分配。更改您的属性将清除警告消息。您不需要执行添加的NSNumber内容。
@property (nonatomic, assign) NSInteger movieId;
这有点令人困惑,因为NSInteger听起来像一个类,但它只是int的typedef。 Apple将其作为64位支持的一部分引入,以便他们可以为编译代码的处理器将其定义为适当大小的整数。
答案 1 :(得分:9)
只需使用NSNumber
即可:
@property (nonatomic, retain) NSNumber *movieId;
答案 2 :(得分:7)
我认为错误是因为property
的@ retain
NSInteger
。 Assign
适用于BOOL
,NSInteger
或double
等原始值。对于对象使用retain
或copy
,具体取决于您是要保留对原始对象的引用还是复制它。
此处NSInteger
显然不是对象,因此您应该尝试assign
而不是保留