0

我有一個使用Core Data的應用程序,它通過使用UIManagedObject獲取它的ManagedObjectContext。從閱讀中,我發現我並不是直接保存上下文 - 而是應該依賴UIManagedObject的自動保存或使用saveToURL:...我的問題是我想驗證存儲在我的實體中的數據。我對指定字符串屬性的最小長度爲1的實體有約束。但是,我可以創建一個新對象,將其屬性指定爲空字符串,並保存該文件。在saveToURL的完成處理程序中:...它始終具有真正的成功價值。然後,我爲我的實體的名稱屬性創建了自己的驗證器。我使用的示例代碼從核心數據編程指南 -UIManagedDocument - 驗證核心數據實體

-(BOOL)validateName:(id *)ioValue error:(__autoreleasing NSError **)outError 

{ 
    if (*ioValue == nil) 

    { 
     if (outError != NULL) 

     { 
      NSString *errorStr = @"nil error"; 

      NSDictionary *userInfoDict = [NSDictionary dictionaryWithObject:errorStr 

       forKey:NSLocalizedDescriptionKey]; 

      NSError __autoreleasing *error = [[NSError alloc] initWithDomain:@"domain" 

       code:1 

       userInfo:userInfoDict]; 

      *outError = error; 

     } 

     return NO; 

    } 

    else if([*ioValue length] == 0) 

    { 

     if (outError != NULL) { 

      NSString *errorStr = @"length error"; 

      NSDictionary *userInfoDict = [NSDictionary dictionaryWithObject:errorStr 

       forKey:NSLocalizedDescriptionKey]; 

      NSError __autoreleasing *error = [[NSError alloc] initWithDomain:@"domain" 

       code:1 

       userInfo:userInfoDict]; 

      *outError = error; 

     } 

     return NO; 

    } 

    else 

    { 

     return YES; 

    } 

} 

在運行此,我看到ioValue具有0長度,它返回NO,但後來我完成處理程序不會被調用。任何幫助都會很棒。

有什麼我缺少如何處理與UIManagedDocument保存錯誤 - 特別是如何通知調用代碼,保存其信息時發生錯誤。

回答

0

通常,您應該只調用saveToURL來創建一個全新的文件。讓其他人自動保存。

此外,我不確定我是否按照你的問題。如果你問如何知道保存失敗,最好的辦法是註冊通知(因爲所有的保存都發生在後臺線程上)。

直接從文檔:

一個UIDocument對象在其生命週期中的任何時刻都有特定的狀態。您可以通過查詢documentState屬性來檢查當前狀態。通過觀察UIDocumentStateChangedNotification通知您可以得知文檔狀態的變化。