2013-03-04 63 views
1

我是CoreData的新手,試圖編寫一個通用函數來查詢數據庫中的信息。我面臨一些問題。正確使用NSFetchRequest

我設置了一個名爲NSError *的私有變量錯誤。我的代碼如下所示:

@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

由於錯誤消息說,你不能在這裏使用非本地對象(又名實例變量*錯誤)。如果你在代碼的某處再次使用這個實例變量*錯誤,會導致內存泄漏。由於實例變量*錯誤將被覆蓋而未被釋放,如果您在其他地方使用它。 – 2013-03-04 03:29:58

回答

2

錯誤變量不能是實例變量,因爲實例變量不允許自動釋放。錯誤參數需要進行自動釋放以避免泄漏,這就是本地變量起作用的原因。