粘住!
嘿伙计们,我正在尝试将托管对象移动到我在用户按下加号按钮时创建的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 :(得分: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
[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的例子让我知道,我可以把它放在一起。