2013-03-04 3 views
1

Я новичок в 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]; 
} 

Это не дает мне ошибку. Почему это так?

+0

Как сказано в сообщении об ошибке, вы не можете использовать нелокальный объект (так называемую ошибку переменной экземпляра) здесь. Это приведет к утечке памяти, если вы снова используете эту переменную * экземпляра где-то в коде. Поскольку ошибка переменной экземпляра * должна быть перезаписана без выпуска, если вы используете ее где-то еще. –

ответ

2

Ошибка переменной не может быть переменной экземпляра, поскольку переменные экземпляра не могут быть автореализованы. Параметр ошибки должен быть автореализован, чтобы избежать утечки, и поэтому работает локальная переменная.

Смежные вопросы