2011-01-21 65 views
0

親愛的社區。 Bellow是代碼的一部分,它工作,但產品對我來說有兩個問題(代碼在AppDelegate主線程中工作,並從選擇對象開始並按下按鈕: 1.有時候,我不明白代碼中哪裏出現錯誤。我無法理解,哪裏有錯誤(你可以看到它在下面)是開始的,但是這種情況發生在我內部有數據時(SQLLite文件大約70Mb) 2.當刪除進程正在工作時,應用程序開始從40Mb到512Mb並在處理完成後保持在同一水平內存GC已啓用核心數據刪除問題:第二部分

你可以建議一些東西來優化它嗎?我有瘋狂的兩週,在那裏檢查谷歌和其他資源,並嘗試將代碼合併到我的應用

ps s ome筆記 - 如果我不保存moc,我無法工作,bcs在數據刪除後立即開始同步並填寫相同的數據。如果我不做保存,那麼每個實體的卷都是雙倍的。

2011-01-21 12:54:11.158 snow [14721:9da7]無法在保存前處理掛起的更改。 100次嘗試後,上下文仍然很髒。通常,這種遞歸污染是由錯誤的驗證方法-willSave或通知處理程序引起的。 2011-01-21 12:54:11.160 snow [14721:9da7] *因未捕獲的異常'NSInternalInconsistencyException'而終止應用程序,原因:'未能在保存前處理掛起的更改。 100次嘗試後,上下文仍然很髒。通常,這種遞歸污染是由錯誤的驗證方法--willSave或通知處理程序造成的。在第一擲 *調用堆棧: ( 0的CoreFoundation 0x00007fff885317b4 __exceptionPreprocess + 180 1 libobjc.A.dylib 0x00007fff88bc10f3 objc_exception_throw + 45 2 CoreData 0x00007fff8005a654 - [的NSManagedObjectContext(_NSInternalChangeProcessing)_prepareForPushChanges:] + 244 3 CoreData 0x00007fff8005a0af - [的NSManagedObjectContext保存:] + 207 4雪0x0000000100006fe9 __30- [AppDelegate中syncOneCarrier:] _ block_invoke_0 + 1657 5基金會0x00007fff87c4e682 - [NSBlockOperation主] + 157 6基金會0x00007fff87c3ede4 - [__ NSOperationInternal開始] + 681 7基金會0x00007fff87d1dbeb __doStart2 + 97 8 libSystem.B.dylib 0x00007fff85f082c4 _dispatch_call_block_and_release + 15 9 libSystem.B.dylib 0x00007fff85ee6831 _dispatch_worker_thread2 + 239 10 libSystem.B.dylib 0x00007fff85ee6168 _pthread_wqthread + 353 11 libSystem.B.dylib 0x00007fff85ee6005 start_wqthread + 13

NSUInteger x = 0; 
    NSError *error = nil; 

    for (NSManagedObject *carrier in [carriersArrayVisible selectedObjects]) 
    { 
     NSString *carrierName = [NSString stringWithString:[carrier valueForKey:@"name"]]; 
     [carriersToExecute addObject:carrierName]; 
     [managedObjectContext deleteObject:carrier]; 
     //[managedObjectContext processPendingChanges]; 
     if (x % 10 == 0) { 
      //[managedObjectContext save:&error]; 
      [managedObjectContext processPendingChanges]; 

      if (error) NSLog(@"Failed to save to data store syncOneCarrier: %@", [error localizedDescription]); 
      [pool drain],pool = nil; 
      pool = [[NSAutoreleasePool alloc] init]; 
     } 
     x++; 
    } 
    [pool drain],pool = nil; 

    [managedObjectContext save:&error]; 

回答

0

基於錯誤,您在某處驗證方法中做了一些不好的事情。

  • 你有管理對象的子類嗎?
  • 那些子類是否有驗證方法?
  • 這些驗證方法是否會觸及其他託管對象或刪除對象或其他不應在驗證方法中執行的操作?

首先在那裏檢查,發佈任何驗證碼,然後也許有人可以幫助你解決這個問題。

+0

不,我沒有。我是,但我從核心數據模型中刪除所有關係。 – Alex 2011-01-21 18:30:52