2010-03-26 36 views
2

我試圖以編程方式訪問關係(一對多)。 我的數據模型包含一個名爲language(帶有兩個字符串屬性)的NSManagedEntity ,它與名爲WordCategory(一對多)的實體有關係。 我使用NSFetchRequest來獲取所有的語言實體。這工作正常。 我得到了關係的valueForKey並且工作正常。我可以使用它的對象。然而,當我嘗試發送郵件數的NSSet中存儲的 WordCategory對象,我得到一個核心數據:訪問關係時,NSSet上的計數方法失敗

換句話說,這條線的工作原理:

 NSLog(@"word category count %@",[[wordCategory anyObject] valueForKey:@"name"]); 

這一個不:

NSLog(@"word category count %@",[wordCategory count] 

我在調試器中得到一條消息:EXC_BAD_ACCESS。

下面的代碼的其餘部分:

NSManagedObjectContext *moc = [myAppDelegate managedObjectContext]; 
NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity:[NSEntityDescription entityForName:@"Language" inManagedObjectContext:moc]]; 

NSError *error = nil; 
NSArray *results = [moc executeFetchRequest:request error: &error]; 
if (error) { 
    [NSApp presentError:error]; 
    return; 
} 

NSManagedObject *obj = [results objectAtIndex:0]; 
NSSet *wordCategory = [obj valueForKey:@"category"]; 
NSLog(@"word category count %@",[wordCategory count]); 

我會感激比任何人都可以在這個神祕有何啓示。謝謝你的幫助!

回答

5
  • (NSUInteger)計數

該方法的返回類型上的NSSet計數是NSUInteger。因此,如果您嘗試使用%@來引用此類型,則會在調試器中收到以下消息:EXC_BAD_ACCESS。您正在訪問一種不是預期的值。

嘗試使用%d代替。 (@「word category count%d」,[wordCategory count]);

bobDevil的評論後編輯(準確的答案 - 更多的評論):

的NSLog(@ 「詞類計數%錄」,[wordCategory計數]);

一切順利。

+0

這是一個NSUInteger,所以他應該使用%lu。請參閱 下的「平臺相關性」http://developer.apple.com/mac/library/documentation/cocoa/conceptual/Strings/Articles/formatSpecifiers.html – bobDevil 2010-03-26 20:29:11

+0

感謝您的信息。你是對的。我會更新帖子,以便每個人都可以輕鬆閱讀。 – 2010-03-26 20:37:19

+0

謝謝!誰會想到答案如此簡單明瞭 – theprole 2010-03-26 20:48:52