2013-03-27 80 views
0

我正在與核心數據的年齡。目前我想了解更多關於UIManagedDocument的信息。我已經做了幾個示例項目來了解更多。最後,我很高興把這個機制轉移到真正的項目上。在現有項目中,我目前正在實施核心數據,所以我創建了數據模型(與應用程序名稱相同)。我爲一個實體生成了一個類,然後創建了一個具有向數據庫添加對象的簡單方法的類。最後,我創建了UIManagedDocument單身,現在它看起來是這樣的:NSCFString _cfurl無法識別的選擇器發送到實例

+ (MDManagedDocument *)sharedDocument { 
    static dispatch_once_t dispatchOncePredicate; 
    __strong static MDManagedDocument *md = nil; 
    dispatch_once(&dispatchOncePredicate, ^{ 
     md = [[MDManagedDocument alloc] init]; 
    }); 
    return md; 
} 

- (id)init { 
    self = [super init]; 
    if(self) { 
     [self setManagedDocument:[[UIManagedDocument alloc] initWithFileURL:[[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject] URLByAppendingPathComponent:@"ThisIsDatabase"]]]; 
     [[self managedDocument] setPersistentStoreOptions:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]];   
    } 
    return self; 
} 

- (void)prepareManagedDocument { 
    if (![[NSFileManager defaultManager] fileExistsAtPath:[[[self managedDocument] fileURL] path]]) { 
     [[self managedDocument] saveToURL:[[self managedDocument] fileURL] forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) { 
      if (success) { 
       NSLog(@"Managed document was created."); 
      } else { 
       NSLog(@"Error occured while creating managed document."); 
      } 
     }]; 
    } else if([[self managedDocument] documentState] == UIDocumentStateClosed) { 
     [[self managedDocument] openWithCompletionHandler:^(BOOL success) { 
      if (success) { 
       NSLog(@"Managed document was opened."); 
      } else { 
       NSLog(@"Error occured while opening managed document."); 
      } 
     }]; 
    } else if([[self managedDocument] documentState] == UIDocumentStateNormal) { 
     NSLog(@"Managed document is opened and prepared for editing and/or reading."); 
    } 
} 

我實例共享實例並調用prepareManagedDocument方法將其與此消息後崩潰:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString _cfurl]: unrecognized selector sent to instance 0xb3774b0' 

有趣的是,它只在第一次運行時崩潰,但由於這次崩潰,它不會創建一個持久存儲,所以它將無法寫入文檔等。我有一個項目正在使用此代碼,並且不會拋出任何異常,因此它正在創建持久性存儲,我可以寫入這個文檔。

我在哪裏錯了?

在此先感謝!

+2

看起來你有一個過早的釋放問題,並且一個NSString正在填充將響應該內部消息的對象所在的空間。打開殭屍,並調用malloc_stack。 – CodaFi 2013-03-27 19:27:45

+0

@CodaFi我啓用了他們兩個+我在樂器中使用Zombies Trace幫助我的應用程序,沒有得到任何有用的信息。順便說一下,在第二次運行時,當它試圖打開文檔時,它會記錄我在處理文檔打開的塊中實現的錯誤消息。 – 2013-03-27 19:40:43

+0

@CodaFi讓我嘗試在設備上運行它。 – 2013-03-27 19:43:52

回答

0

問題解決!我有一個擴展NSURL的類,並且只有一個方法baseURL,在我刪除這個類或者重命名方法一切正常。

相關問題