ios - 在 Objective-C 中传回 NSManagedObject

标签 ios objective-c core-data delegates segue

我已经尝试按照这篇文章 re: passing data back to a prior viewController without much luck。我花在这上面的时间比我愿意承认的要多,我已经阅读了所有可能的内容,但我在这里发现的任何内容都不起作用。

Passing Data between View Controllers

这是我正在尝试做的事情:

Legend: AddPOIViewController -----------> CategoryViewController

Step 1: empty textField ---segue---> selectCategory

Step 2: setCategory on CategoryViewController

Step 3: AddPOIViewController <--delegate-- setCategory

我有一个 AddPOIViewController (A) 和一个 CategoryViewController (二).我有一个 segue从 A 到 B 都可以正常工作。我想在 B 中选择一个类别并将其转储回 A。

这是我所做的:

AddPOIViewController.h

在我的搜索中来自 AddPOIViewControllerCategoryTableViewController ,我按如下方式设置委托(delegate):

 CategoryTableViewController *categoryTableViewController = [navigationController viewControllers][0];
 categoryTableViewController.delegate = (id<CategoryTableViewControllerDelegate>)self;


// Delegate method
 - (void)addItemViewController:(CategoryTableViewController *)controller didSelectCategory:(LocationCategory *)selectedCategory {
    NSLog(@"This was returned from CategoryTVC: %@", self.selectedCategory);
}

CategoryTableViewController.h

// This property sets CategoryTVC as the delgate of AddPOIViewController
@property (nonatomic, weak) id <CategoryTableViewControllerDelegate> delegate;

// This property is public so the AddPOIVC knows about it
@property (nonatomic, strong) LocationCategory *selectedCategory;

CategoryTableViewController.h

    - (IBAction)done:(id)sender {
        [self.delegate categoryTableViewControllerDidSave:self];    
    // This passes the value back to the AddPOIViewController
    [self.delegate addItemViewController:self didSelectCategory:self.selectedCategory];
}

最佳答案

我认为问题出在 CategoryTableViewController 中的 IBAction done: 方法中:

- (IBAction)done:(id)sender {
    [self.delegate categoryTableViewControllerDidSave:self];    
    // This passes the value back to the AddPOIViewController
    [self.delegate addItemViewController:self didSelectCategory:self.selectedCategory];
}

问题在于此方法的第一行调用了委托(delegate)的 categoryTableViewControllerDidSave: 方法,该方法关闭了 View Controller :

    [self dismissViewControllerAnimated:YES completion:nil];

因此 CategoryTableViewController 在到达下一行之前被关闭,这是传递 NSManagedObject 的地方。

要修复它,只需切换 IBAction done: 方法中的两行:

- (IBAction)done:(id)sender {
    // This passes the value back to the AddPOIViewController
    [self.delegate addItemViewController:self didSelectCategory:self.selectedCategory];
    // This causes this view controller to be dismissed:
    [self.delegate categoryTableViewControllerDidSave:self];    
}

您还需要保存在调用 AddPOIViewControllerselectedCategory 属性时传递的 selectedCategory:

- (void)addItemViewController:(CategoryTableViewController *)controller didSelectCategory:(LocationCategory *)selectedCategory {
    self.selectedCategory = selectedCategory;
    NSLog(@"This was returned from CategoryTVC: %@", self.selectedCategory);
}

关于ios - 在 Objective-C 中传回 NSManagedObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29755993/

相关文章:

ios - 使用 NSPredicate 用另一个 NSArray 过滤一个 NSArray

ios - 创建一个可选 block 作为变量

ios - 尝试为单元格创建两个动画

ios - 构建失败——属性必须具有已定义的类型

ios - 为 UITextField 提供两个核心数据属性?

ios - 在 iOS 上将 PCM (CMSampleBufferRef) 编码为 AAC - 如何设置频率和比特率?

ios - iOS 上的 iTunes 应用程序评论来自应用程序

objective-c - Box2d - 即时更改接触过滤器

ios - "Core Data is not a relational database."为什么知道这一点很重要?

IOS Swift 获取选定的图像路径