2013-08-06 208 views
0

我收到以下錯誤[context save:&error]。我應該如何解決?核心數據應用程序在保存時崩潰

無法識別的選擇發送到 類* - [的NSKeyedArchiver的dealloc]:警告:釋放的NSKeyedArchiver沒有上過-finishEncoding調用它。 *終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因是:'+ [TempObject encodeWithCoder:]: 無法識別的選擇發送到類的

在這裏,我使用的代碼。

NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext]; 
PostRequest *postRequestObject = (PostRequest *)[NSEntityDescription insertNewObjectForEntityForName:@"PostRequest" inManagedObjectContext:context]; 

DummyClass *request = OtherClassObject; 
postRequestObject.request = request; 
// request is attribute with type transformable 
NSLog(@"requestpost data -> %@",postRequestObject.request); 

NSError *error = nil; 
if (![context save:&error]) { 
    // Replace this implementation with code to handle the error appropriately. 
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    abort(); 
} 

#pragma mark - private method 
- (NSFetchedResultsController *)fetchedResultsController 
{ 
    if (_fetchedResultsController != nil) 
    { 
     return _fetchedResultsController; 
    } 

    NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease]; 
    // Edit the entity name as appropriate. 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"PostRequest" inManagedObjectContext:self.managedObjectContext]; 
    [fetchRequest setEntity:entity]; 

    [fetchRequest setFetchBatchSize:80]; 

    // Edit the sort key as appropriate. 
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"status" ascending:NO]; 
    NSArray *sortDescriptors = @[sortDescriptor]; 
    [sortDescriptor autorelease]; 

    [fetchRequest setSortDescriptors:sortDescriptors]; 

    NSFetchedResultsController *aFetchedResultsController = [[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"root"] autorelease]; 
    aFetchedResultsController.delegate = self; 
    self.fetchedResultsController = aFetchedResultsController; 

    NSError *error = nil; 
    if (![self.fetchedResultsController performFetch:&error]) { 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    } 

    return _fetchedResultsController; 
} 
+0

這個討論與http://stackoverflow.com/questions/18072849/core-data-unresolved-error-app-crashs-on-save相同嗎?如果是這樣,請刪除此問題(或以前的問題)。 –

+0

**上下文可能有用**。你想要保存什麼數據? –

+0

數據是帶參數的請求。 – yogwiz

回答

2

該錯誤消息說,您有一個名爲TempObject類,你試圖調用encodeWithCoder:就可以了,這個類沒有實現該方法。正如你所看到的,這是一個崩潰的錯誤。

似乎你在某處有可轉換的核心數據屬性,並且你正在爲此屬性分配一個TempObject的實例。我不知道那是哪裏。你的代碼片段提到了一個可變形的屬性,但是你不在代碼中使用TempObject。我不知道這段代碼是否實際上不是崩潰的原因,或者是由於某種原因手動更改名稱。

反正,當你有一個可轉換的屬性,你必須做兩件事情之一:

  1. 讓你的類符合NSCoding。你在評論中說過你做過,但是你的錯誤信息說你沒有 - 或者至少沒有完成這項工作。 NSCoding定義了兩種方法,initWithCoder:encodeWithCoder:,並且你的類必須實現它們兩個。

  2. 創建一個自定義NSValueTransformer子類可以從NSData你的對象轉換爲/,和配置您的核心數據模型來使用它。蘋果提供了一些非常好的(但簡單的)如何做到這一點的例子。

    分配給一個變形屬性必須

什麼做的其中之一。哪一個取決於你。

似乎,你正在嘗試做#1但還沒有完成工作。確保你的班級符合NSCoding

+0

感謝@Tom,有用的信息。 – yogwiz

相關問題