Я новичок в CoreData и пытаюсь написать общую функцию для запроса информации из базы данных. Я сталкиваюсь с некоторыми проблемами.Правильное использование NSFetchRequest
Я установил приватную переменную с именем NSError * error. Мой код выглядит следующим образом:
@interface DatabaseHandler()
{
NSError * error;
}
@end
-(void)queryCoreDataModel:(NSString*)tableName sortBy:(NSArray *)sortArray{
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:tableName];
request.fetchLimit = 20;
request.sortDescriptors = sortArray;
[context executeFetchRequest:request error:&error];
}
Это дает мне эту ошибку: Passing address of non-local object to __autoreleasing parameter for write-back.
Но когда я делаю это:
-(void)queryCoreDataModel:(NSString*)tableName sortBy:(NSArray *)sortArray{
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:tableName];
request.fetchLimit = 20;
request.sortDescriptors = sortArray;
NSError *error;
[context executeFetchRequest:request error:&error];
}
Это не дает мне ошибку. Почему это так?
Как сказано в сообщении об ошибке, вы не можете использовать нелокальный объект (так называемую ошибку переменной экземпляра) здесь. Это приведет к утечке памяти, если вы снова используете эту переменную * экземпляра где-то в коде. Поскольку ошибка переменной экземпляра * должна быть перезаписана без выпуска, если вы используете ее где-то еще. –