2010-07-10 28 views
0

當我向核心數據中的提取請求添加排序描述符時,出現內存泄漏。如果我註釋掉NSSortDescriptor塊,它將在Instruments中沒有內存泄漏的情況下運行。導致內存泄漏的核心數據NSSortDescriptor

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Pools" inManagedObjectContext:self.managedObjectContext]; 
[fetchRequest setEntity:entity]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"game.league.id=%i",[lid intValue]]; 
[fetchRequest setPredicate:predicate]; 

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"game.date" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 
[sortDescriptors release]; 
[sortDescriptor release]; 

NSError *error; 
NSArray *items = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; 

// Do Something 

[fetchRequest release]; 
[items release]; 

任何想法?

回答

1

在排序描述符中,您正在使用關鍵路徑game.date進行關係。

您的泄漏可能與關鍵路徑中的其中一個對象相關聯。當您移除排序時它會消失,因爲那樣關鍵路徑中的對象不會執行任何操作。

如果你有瞬態屬性,自定義訪問器,非實體屬性等在game實體我會看看那裏。自定義值變換器也是一個不錯的選擇。

儀器中的堆棧應該告訴您確切的哪個對象正在泄漏。

+0

那裏沒有任何自定義代碼。核心數據堆棧可能是錯誤的? – 2010-07-13 13:07:18

+0

不太可能。爲什麼會出現泄漏,而不是您設置Core Data堆棧的位置?樂器會告訴你什麼在泄漏。將此源文件拖放到樂器中,它會向您顯示泄漏線。檢查該行的堆棧,它會告訴你哪個對象泄漏。它可能在''do something'與'game.date'相關的代碼中。 – TechZen 2010-07-13 13:34:53