2011-09-18 177 views
0

我想知道,如果有人能夠澄清以下從蘋果的核心數據文檔:核心數據獲取持久性

的更改不會反映到控制器的管理對象 方面已經收到了processPendingChanges消息之後。因此,如果 您更改被管理對象的屬性的值,以使其在提取結果控制器的結果集中的位置發生更改,則 其控制器報告的索引通常不會更改 ,直到當前事件週期結束(當processPendingChanges 被調用時)。例如,下面的代碼片段將登錄 「同」:

NSFetchedResultsController *frc = <#A fetched results controller#>; 
NSManagedObject *managedObject = <#A managed object in frc's fetchedObjects array#>; 
NSIndexPath *beforeIndexPath = [frc indexPathForObject:managedObject]; 
[managedObject setSortKeyAttribute: 
        <#A new value that changes managedObject's position in frc's fetchedObjects array#>; 
NSIndexPath *afterIndexPath = [frc indexPathForObject:managedObject]; 
if ([beforeIndexPath compare:afterIndexPath] == NSOrderedSame) { 
    NSLog(@"same"); 
} 

到底是什麼「通常不會改變,直到當前事件週期的結束」呢?我在我的代碼中遇到了這種情況,但是我不確定是否可以100%依賴我的索引保持相同的狀態,直到我明確地預先保存了託管對象上下文爲止。上面的代碼是否可以修改,而不對上下文執行保存,這樣它就不會記錄「相同」?

回答

1

不能確定我是否可以100%地依靠我的索引保持相同的 ,直到我明確地預先保存我的託管對象上下文爲止。

我不會。 「當前事件循環」是運行循環的當前迭代。

+0

+1 runloop處理如此之快(除非你阻止它),它在用戶界面中的效果無法被用戶識別。 – TechZen

+0

我想我很困惑,爲什麼文檔繼續提供一個代碼示例,說它應該工作,如果它不是應該完成的。如果我在UITableView委託中有類似的代碼,moveRowAtIndexPath會阻止運行循環直到完成? –

+0

我還沒有在文檔中查找過這個例子,但我會說這只是證明了這一點,而不是「應該工作」或「不應該完成」的事情。整個事情只是一個警告:如果您更改frc的排序鍵,則結果順序不會更改,直到運行循環完成。 – Caleb