2011-07-06 104 views
0

我的工作,將與我的iPad溝通和核心數據發送來回核心數據項目。我的網絡部分主要是想通了,但我有一個簡單的獲取請求行爲的問題。這裏是獲取請求:爲獲取請求,這不是獲取

NSManagedObjectContext *context=[[[NSDocumentController sharedDocumentController] currentDocument] managedObjectContext]; 
//NSManagedObjectContext *context=[self managedObjectContext]; 
if (context == nil){ 
    NSLog(@"Crap"); 
} 
NSLog(@"Context: %@",context); 
//fetch request: (found here: http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/iPhoneCoreData01/Articles/05_Fetching.html) 
NSLog(@"Starting to fetch:"); 

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Song" inManagedObjectContext:context]; 
[request setEntity:entity]; 
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"cueNo" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
[request setSortDescriptors:sortDescriptors]; 
[sortDescriptors release]; 
[sortDescriptor release]; 
NSError *error; 
NSMutableArray *mutableFetchResults = [[context executeFetchRequest:request error:&error] mutableCopy]; 

如果我用這個:

NSManagedObjectContext *context=[[[NSDocumentController sharedDocumentController] currentDocument] managedObjectContext]; 

然後我得到一個錯誤,指出:

+entityForName: could not locate an NSManagedObjectModel for entity name 'Song'

如果我用這個:

NSManagedObjectContext *context=[self managedObjectContext]; 

即使我有d,mutableFetchResults也會返回null ata在實體Song中。

我複製此直接從使用第一方法來設置情境以前的版本讀取請求它工作得很好那裏。

任何幫助將不勝感激!

故障排除:

Printing description of persistentStoreCoordinator: 

Printing description of _managedObjectModel: 
(<NSManagedObjectModel: 0x1001c5250>) isEditable 0, entities { 
    Song = "(<NSEntityDescription: 0x100149ba0>) name Song, managedObjectClassName NSManagedObject, renamingIdentifier Song, isAbstract 0, superentity name (null), properties {\n cueName = \"(<NSAttributeDescription: 0x1001c5600>), name cueName, isOptional 1, isTransient 0, entity Song, renamingIdentifier cueName, validation predicates (\\n), warnings (\\n), versionHashModifier (null), attributeType 700 , attributeValueClassName NSString, defaultValue (null)\";\n cueNo = \"(<NSAttributeDescription: 0x1001c5570>), name cueNo, isOptional 1, isTransient 0, entity Song, renamingIdentifier cueNo, validation predicates (\\n), warnings (\\n), versionHashModifier (null), attributeType 700 , attributeValueClassName NSString, defaultValue (null)\";\n}, subentities {\n}, userInfo {\n}, versionHashModifier (null)"; 
}, fetch request templates { 
    newFetchRequest = "<NSFetchRequest: 0x1001c5420> (entity: Song; predicate: (cueNo < \"0\"); sortDescriptors: (null); limit: 0)"; 
} 

Printing description of _managedObjectContext: 
<NSManagedObjectContext: 0x1001c5890> 

回答

0

錯誤消息是很清楚的,它會告訴你NSEntityDescription找不到與您所提供的管理對象上下文該名稱的任何實體。由於您似乎在驗證上下文不是零(一個好的第一步),因此您需要考慮其餘的Core Data堆棧。託管對象上下文是否具有持久性存儲協調器?確保。持久性商店協調員是否具有託管對象模型?該模型是否包含Song實體?沿線某處有些東西被破壞,但上面沒有足夠的細節來猜測在哪裏。

至於第二管理對象的上下文選項,executeFetchRequest:error:應該只如果發生錯誤,返回零。你傳遞一個錯誤參數,所以這是你應該看看的第一件事情,以確定什麼是錯的。

獲取請求顯然不是錯,但你的問題建議你的管理對象上下文在某種程度上打破。

+0

非常感謝!我做了檢查,我沒有協調員或人力部。我現在做,模型包含歌曲實體。但我不確定如何將上下文與模型結合。任何幫助將不勝感激。 –

+0

我今天做了更多的故障排除。我終於厭倦了沒有從我的抓取中獲得任何結果,並以編程方式添加數據。我終於得到了我需要的結果,但是揭示了IB未正確連接的問題。任何想法我能做些什麼來追蹤這個問題? –

+0

我通過抓取並打印出變量「錯誤」的描述我得到了這個:打印錯誤描述: NSDocument如果我正確理解你,如果這個變量沒有正確,只會有問題嗎? –

0

錯誤是告訴你,在管理對象方面不具有管理包含實體Song對象模型。管理對象模型是.xcdatamodel文件。

如果你想打開另一個設備上的持久性存儲,本地應用程序必須能夠訪問創建遠程持久性存儲相同的模型文件,並且必須在模型添加到本地環境。你正在收到的錯誤表明這沒有發生。

如果以前工作正常,那麼您可能根本沒有添加或刪除.xcdatamodel文件,該文件從Xcode中本地應用程序的構建目標定義Song實體。