在XIB中将managedObject发送到tableview

时间:2014-01-23 03:19:22

标签: ios iphone objective-c uitableview

粘住!

嘿伙计们,我正在尝试将托管对象移动到我在用户按下加号按钮时创建的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;

    }
}

1 个答案:

答案 0 :(得分: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];
}

有几点需要注意。

  • 我假设您在Core Data中有一个名为Card的实体。
  • 我假设您没有使用UINavigationController。如果您希望维持面包屑(通常建议用户)返回,您可能希望使用UINavigationController
  • 我假设您已在Xcode的身份检查器中将View Controller的 Storyboard ID 设置为“AddCard”。
  • 我假设您已在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的例子让我知道,我可以把它放在一起。