2009-10-23 35 views
0

我已經將以下內容添加到Core Data Recipes示例中的AppDelegate,但是我沒有在控制檯中獲得任何打印結果...任何想法?iPhone dev:您如何打印Core Data fetchRequest的結果?

#pragma mark - 
#pragma mark TESTING RETRIEVAL OF RECIPE NAMES 

- (NSArray *)allRecipes{ 
    NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"name" inManagedObjectContext:self.managedObjectContext]; 
    [request setEntity:entity]; 

    NSArray *result = [[NSArray alloc] init]; 
    result = [self.managedObjectContext executeFetchRequest:request error:NULL];  

    NSManagedObject *firstObject = [result objectAtIndex:0]; 
    NSLog(@"firstObject.name: %@", [firstObject valueForKey:@"name"]); 

    } 

的XCode給我這個方法實施後的警告:「控制到達非void函數結束」

我想這意味着我沒有得到任何結果......這是顯而易見的,因爲沒有正在打印。

+1

1.作爲「entityForName:」,你應該提供一個實體(類)名稱(例如@「Recipe」),而不是一個鍵。 2.警告是因爲您沒有將NSArray *返回給調用者: 返回結果; 3.您可以通過詢問陣列的大小來檢查是否有任何記錄被提取: [結果計數] 4.您最初如何使用數據填充上下文? – gerry3

回答

1

在您的.xcdatamodel文件中,「名稱」與實體的類是否完全匹配 - 而不是實體所需的屬性? 您是否在應用程序委託中檢查設置方法是否正確完成? 你檢查了managedObjectContext!= nil嗎? 您是否編輯過.xcdatamodel文件?如果自上次運行程序以來已經這樣做了,則需要從應用程序的模擬器的Documents目錄中刪除數據文件,或者需要爲數據模型添加模型版本。

由於gerry3說,你的第一個問題是,該函數指定你必須返回一個數組,你不會返回任何東西。

另一個問題是您獲取「name」類的屬性,但是您再次使用「name」作爲valueForKey。你真的有一個實體「名稱」屬性「名稱」?更有可能你的實體被命名爲別的東西,而name是它的屬性 - 在這種情況下,你需要改變NSEntityDescription方法entityForName:argument。