2010-12-16 68 views
1

有我的第一核心數據項目的麻煩......核心數據,檢查現有的許多一對多的關係

我有一個多兩個實體一對多的關係:行情< < --- >>鍋爐。

當用戶在UITableView行中選擇鍋爐時,我想知道該鍋爐是否與該頁面正在管理的報價有關係,並切換該關係。

我認爲下面的代碼失敗,因爲謂詞不知道鍋爐已被選中,但我不能完全得到這個權利...

- (void)managedObjectSelected:(NSManagedObject *)managedObject 
    { 

    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    [request setEntity:[NSEntityDescription entityForName:@"Boiler"  inManagedObjectContext:managedObject.managedObjectContext]];  

    request.predicate = [NSPredicate predicateWithFormat:@"ANY myQuote = %@", quote]; 
    NSError *error; 
    NSUInteger count = [managedObject.managedObjectContext countForFetchRequest:request error:&error]; 

    if(count==0){ 
     [quote addMyBoilersObject:(Boiler*) managedObject]; 
    } 
    else { 
     [quote removeMyBoilersObject:(Boiler*) managedObject]; 
    } 

    [managedObject.managedObjectContext save:&error]; 

    } 

任何幫助或指針會非常感謝...

回答

0

解決此問題的一種方法是使用NSFetchedResultsController來填充您的UITableView。如果你這樣做,那麼你應該可以切換選擇

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

    { 
    // Get the Boiler that was selected. 
    Boiler *boiler = (Experiment *) [fetchedResultsController objectAtIndexPath:indexPath]; 
    if (boiler) 
     { 
     if ([[self quote] boilers] containsObject:boiler]) 
      { 
      // connected, so disconnect 
      } 
     else 
      { 
      // disconnected, so connect 
      } 

     } 
    } 

無論如何,你有沒有嘗試過這樣的事情?

+0

這似乎是正確的方法,但是您能否指出我在示例中對「包含」命令的引用,編譯器不喜歡它,並且我正在努力尋找教程。謝謝。 – MattSW 2011-01-10 14:41:41

+0

這是我的錯誤 - 請參閱編輯修正。 [[self quote]鍋爐]返回一個NSSet。 -containsObject:是NSSet的實例方法。希望這可以幫助。 – westsider 2011-01-10 17:39:14