2013-10-13 91 views
0

一對多的實體「會議」 <關係--- >>「用戶」核心數據:使用謂詞與一對多的關係

我做了一個NSManagedSubclass爲「會議」,它有一個屬性:

@property (nonatomic, retain) NSSet *users; 

*用戶中的對象保存良好,我可以看到它們。但是當我試圖取回時,沒有任何反應。我在Block中設置了斷點,看起來好像抓取塊永遠不會到達斷點。沒有錯誤。應用程序仍在運行。

我有以下代碼:

 NSString *userName = @"iphone"; 
     NSLog(@"Username %@", userName); 

     NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Meeting"]; 
     NSPredicate *predicate = [NSPredicate predicateWithFormat:@"users.username == %@", userName]; 
     NSLog(@"Predicate %@", predicate); 
     [request setPredicate:predicate]; 

     [self.managedObjectContext executeFetchRequest:request onSuccess:^(NSArray *results) 
     { // I have setup the breakpoint here 
      NSLog(@"results.count %i", results.count); 

      if(results.count > 0) 
      { 
       NSLog(@"object found"); 
      } 
     }onFailure:^(NSError *error) { 
        NSLog(@"There was an error! %@", error); 
     }]; 

登錄:

2013-10-12 20:10:19.200 App[3128:c07] Username iphone 
2013-10-12 20:10:19.200 App[3128:c07] Predicate users.username == "iphone" 

我可以在會議就好了其他屬性取。即如果我更換謂詞行:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"meetings_id == %@", meetings_id]; 

,該斷點將停止代碼時,會顯示「找到對象」。

同樣,我可以在用戶關係中看到「iphone」用戶。我究竟做錯了什麼?

+0

是因爲它在一個塊? – DogCoffee

+0

你是什麼意思?塊與其他屬性正常工作。 – user1107173

回答

2

對於多對多關係,您必須使用謂詞修飾符來指定預期的行爲。由於您正在搜索Meeting s,CoreData無法從您的謂詞users.username == %@中找出,如果您想要Meeting s,其中ALL用戶具有指定的用戶名或只有那些單個用戶滿足要求(請參閱此處深入documentation)的用戶。

試試這個一變,因爲我認爲這是你想要的東西:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY users.username == %@", userName] 
+0

謝謝。我得到了同樣的行爲。我的日誌內容爲:2013-10-12 20:38:34.367應用[3532:c07]用戶名iphone 2013-10-12 20:38:34.367 App [3532:c07]謂詞ANY users.username ==「iphone」 – user1107173

+0

有沒有辦法讓全部顯示用戶中的所有對象? – user1107173