【问题标题】:NSInteger,NSNumber "property 'x' with 'retain' attribute must be of object type "NSInteger,NSNumber "带有 'retain' 属性的属性 'x' 必须是对象类型"
【发布时间】:2011-04-18 07:10:51
【问题描述】:

我正在使用一个从 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 中输入 caste;

NSNumber aNSNumbermovieID = sqlite3_column_int(compiledStatement, 1); 
            NSInteger amovieId = [aNSNumbermovieID integerValue];

但我仍然遇到相同的错误(带有“retain”属性的属性“x”必须是对象类型)。

有什么建议吗?

【问题讨论】:

    标签: iphone


    【解决方案1】:

    NSInteger 是一个标量而不是一个对象。所以你不应该保留它,它应该被分配。更改您的属性将清除警告消息。你不需要做你添加的 NSNumber 的东西。

    @property (nonatomic, assign) NSInteger movieId;
    

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

    【讨论】:

      【解决方案2】:

      只需使用NSNumber 即可:

      @property (nonatomic, retain) NSNumber *movieId;
      

      【讨论】:

        【解决方案3】:

        我认为错误是因为NSInteger 的@property retainAssign 用于原始值,例如 BOOLNSIntegerdouble。对于对象,请使用 retaincopy,具体取决于您是要保留对原始对象的引用还是复制它。

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

        【讨论】:

          猜你喜欢
          • 2010-11-23
          • 2016-01-23
          • 1970-01-01
          • 2016-09-15
          • 2016-06-03
          • 2020-03-27
          • 2013-10-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多