2010-06-03 58 views
0

我已經完成並使用tableview來複制核心數據教程來顯示內容。但是,我想通過在視圖上執行訪問實體而不使用tableview。我使用了以下提取代碼,但返回的計數始終爲0.數據在使用SQLite工具打開時存在。核心數據混淆:獲取不帶tableview

NSManagedObject *entryObj; 
XYZDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 

NSManagedObjectContext *managedObjectContext = appDelegate.managedObjectContext; 
NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Quote" inManagedObjectContext:managedObjectContext]; 
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"id" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 

[request setSortDescriptors:sortDescriptors]; 
[request setEntity: entity]; 

NSArray *results = [managedObjectContext executeFetchRequest:request error:nil]; 

if (results == nil) { 
    NSLog(@"No results found"); 
    entryObj = nil; 
}else { 
    NSLog(@"results %d", [results count]); 
} 

[request release]; 
[sortDescriptors release]; 

計數返回總是0;它應該是5.

任何人都可以指向我的參考或教程有關創建控制器不與tableview使用。

回答

1

據我所知,一切都很好(除了我有點擔心使用'id'作爲屬性名稱,因爲它是Objective-C中的關鍵字)。嘗試刪除排序描述符,看看是否改變了任何東西。另外,添加一個錯誤檢查。也許正在發生的事情可以告訴你。我認爲「Quote」是實體的正確名稱。如果這些都沒有幫助,我不認爲問題出在提取請求中。

對於它的價值,這是我會怎麼寫呢:

XYZDelegate * appDelegate = [[UIApplication sharedApplication] delegate]; 
NSManagedObjectContext * context = appDelegate.managedObjectContext; 

NSFetchRequest * request = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Quote" inManagedObjectContext:context]; 
NSSortDescriptor * sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"id" ascending:YES]; 
[request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]]; 
[sortDescriptor release]; 
[request setEntity:[NSEntityDescription entityForName:@"Quote" inManagedObjectContext:context]]; 
NSError * error = nil; 
NSArray *results = [context executeFetchRequest:request error:&error]; 
[request release]; 

if (error) { 
    NSLog(@"ERROR: %@ %@", [error localizedDescription], [error userInfo]); 
} 

if (results == nil) { 
    NSLog(@"No results found"); 
    entryObj = nil; 
} 
else { 
    NSLog(@"results %d", [results count]); 
} 
+0

我已經試過你的建議。打印出來的錯誤是執行代碼的類的名稱。在沒有排序描述符的情況下執行相同的操作時,出現「錯誤地址」錯誤。結果,無論我嘗試返回「count:0」。我想知道在這種情況下是否需要額外的方法來實現coredata。請注意,我只是在閱讀,而不是嘗試添加/刪除/更新。 – 2010-06-03 17:50:50

+0

我試過你的代碼,結果是一樣的(結果:0)。這是我需要訪問「報價」實體還是他們缺少的東西? – 2010-06-03 17:54:50

+0

最後修復它。模擬器創建另一個文件夾,一個額外的SQLite數據庫。切換DB修復它。代碼畢竟是正確的。謝謝您的幫助。 – 2010-06-03 18:33:07