我正在开发一个应用程序,其中的数据是从 sqlite 数据库填充的。所有与数据库相关的内容都在 appdelegate
类中完成。我使用 NSMutable 数组来保存对象。
我使用了一个单独的 NSObject
类作为属性。
我收到错误:具有“retain”属性的属性“x”必须是对象类型
。
我的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 中输入种姓。例如;
NSNumber aNSNumbermovieID = sqlite3_column_int(compiledStatement, 1);
NSInteger amovieId = [aNSNumbermovieID integerValue];
但我仍然遇到相同的错误(带有“retain”属性的属性“x”必须是对象类型)。
有什么建议吗?
最佳答案
NSInteger 是标量而不是对象。所以你不应该保留它,应该分配它。更改您的属性将清除警告消息。您不需要执行添加的 NSNumber 操作。
@property (nonatomic, assign) NSInteger movieId;
这有点令人困惑,因为 NSInteger 听起来像一个类,但它只是 int 的 typedef。 Apple 将其作为 64 位支持的一部分引入,以便他们可以将其键入为正在编译代码的处理器的适当大小的整数。
关于iphone - NSInteger,NSNumber "property ' x' 具有 'retain' 属性必须是对象类型“,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5699619/