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" с атрибутом "Сохранить" должно быть типа объекта).
Любое предложение?
Ответы
Ответ 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
вместо сохранения