2014-01-23 17 views
0

卡住了!發送managedObject到XIB內的tableview

嗨,大家好,我正在努力將一個託管對象移動到我在用戶按下加號按鈕時創建的Xib中的tableview。我想用核心數據填充按鈕,稱爲「DeckID」。由於我沒有長時間編碼,所以我根本不瞭解Core Data。也許可以用prepareforsegue完成,但我不確定。我一直在絞盡腦汁的一段時間!代碼包含在內供您參考。

任何幫助都將不勝感激!

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 

    if ([segue.identifier isEqualToString:@"viewCard"]) { 

     NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
     NSManagedObject *object = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
     NSString *deckID = [object valueForKey:@"deckID"]; 

     //Set the variable before it is declared! 
     AddCardVC *addC = segue.destinationViewController; 
     = [object valueForKey:@"deckID"]; 


    } 

    //The else is to ask the obvious statement; if it is not above, then be low. 
    else{ 

     viewAll *viewing = segue.destinationViewController; 
     viewing = segue.destinationViewController; 

    } 
} 

回答

0

如果你在你的視圖控制器一個NSManagedObjectContext *managedContext;財產按下「+」按鈕時,那麼你就可以發送一個管理對象引用新的視圖控制器。

- (IBAction)addCardButtonPressed:(UIButton *)sender { 
    // Get our managed object reference. 
    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *cardEntity = [NSEntityDescription entityForName:@"Card" inManagedObjectContext:self.managedContext]; 

    [request setEntity:cardEntity]; 

    NSError *error = nil; 
    NSArray *cards = [self.managedContext executeFetchRequest:request error:&error]; 

    // Prepare to manually transition when the back button is pressed. 
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil]; 

    // The @"AddCard" identifier is the Storyboard identifier found in Xcode's storyboard properties 
    AddCardVC * addC = (AddCardVC *)[storyboard instantiateViewControllerWithIdentifier:@"AddCard"]; 
      addC.cards = cards; 

    [self presentViewController:addCardVC animated:NO completion:nil]; 
} 

一些事情要注意。

  • 我假設您在覈心數據中有一個實體,名爲Card
  • 我假設你沒有使用UINavigationController。如果你想保持一個麪包屑(它通常建議),爲用戶回去,你會想用UINavigationController
  • 我假設你已經設置視圖控制器的故事板ID爲「AddCard」在Xcode的身份檢查員。
  • 我假設你已經在你的UIButton「添加卡」和你的視圖控制器之間設置了一個IBAction。
  • [self.managedContext executeFetchRequest];的調用返回一個數組。我假定您的AddCardVC視圖控制器在其標題中包含一個名爲cards的NSArray中的公共屬性。

您的AddCardVC.h應該有卡片數組或單個卡片對象屬性,因此您可以像上面那樣設置它。

@interface AddCardVC : UIViewController 
@property (strong, nonatomic) NSArray *cards; 
@end 

我有點困惑,因爲你的主題標題說發送通過tableview,但你問如何做,當用戶按下+按鈕。如果您需要在用戶按下單元格時發送與您的tableview關聯的託管對象,則可以通過實現委託方法來執行此操作。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil]; 

    AddCardVC *addCardVC = (AddCardVC *)[storyboard instantiateViewControllerWithIdentifier:@"AddCard"]; 
    addCardVC.cards = [self.managedObjectsArray objectAtIndex:indexPath.row]; 

    [self presentViewController:addCardVC animated:NO completion:nil]; 
} 

此外,這不會提供任何麪包屑供用戶返回。如果你想讓用戶返回到前一個屏幕,你將不得不添加一個後退按鈕並自己編寫代碼,就像我們上面做的那樣。

如果你想使用UINavigationController的例子讓我知道,我可以把它放在一起。

+0

一個輝煌和非常有幫助的答案!非常感激!爲了混淆道歉,我的意思是我試圖發送數據到視圖中的tableview,點擊viewAllCards屏幕上的添加按鈕激活,因爲我對XIB視圖相對不熟悉,這有點混亂。 – user3016288

+0

很高興它幫助!如果這解決了您的問題,請將其標記爲已回答:) –

相關問題