Подтвердить что ты не робот

NSInteger, NSNumber "свойство 'x' с атрибутом 'Сохранить' должно быть типа объекта"

Я работаю над приложением, в котором данные заполняются из базы данных 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. thene caste в NSInteger.for ex;

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

но все же я получаю те же ошибки (свойство "x" с атрибутом "Сохранить" должно быть типа объекта).

Любое предложение?

4b9b3361

Ответ 1

NSInteger - это скаляр, а не объект. Поэтому вы не должны его сохранять, он должен быть назначен. Измените свое свойство, чтобы очистить предупреждающее сообщение. Вам не нужно делать материал NSNumber, который вы добавили.

@property (nonatomic, assign) NSInteger movieId;

Это немного запутанно, так как NSInteger звучит как класс, но это просто typedef для int. Apple представила его как часть 64-битной поддержки, так что они могут набирать ее до нужного размера для процессора, для которого компилируется код.

Ответ 2

Просто используйте NSNumber, и вы можете сделать:

@property (nonatomic, retain) NSNumber *movieId;

Ответ 3

Я думаю, что ошибка связана с @ property retain для NSInteger. Assign для примитивных значений, таких как BOOL, NSInteger или double. Для объектов используйте retain или copy, в зависимости от того, хотите ли вы сохранить ссылку на исходный объект или сделать его копию.

Здесь NSInteger явно не является объектом, поэтому вы должны попробовать Assign вместо сохранения