将数据从视图控制器传递到 NSObject

Posted

技术标签:

【中文标题】将数据从视图控制器传递到 NSObject【英文标题】:Pass Data from View Controller to NSObject 【发布时间】:2016-05-08 00:39:45 【问题描述】:

我有两个视图控制器使用NSMutableArray 访问一个NSObject。第一个 VC 是加载数组对象的 tableview,第二个 VC 是我添加更多对象的地方。当我 popViewControllerAnimated 从我的第二个 VC 到第一个 VC 时,新对象丢失并且第一个 VC 只加载原始数组,甚至当我重新加载 viewWillAppear 中的 tableView 时。

    为什么我从第二个 VC 传递到 NSMutableArray 的新对象丢失了? 如何确保将对象添加到可以从任何 VC 访问的 NSMutableArray

我有一个NSObject 类型的Groceries 类,它有NSMutableArray *groceryList

// NSObject class
@interface Groceries : NSObject
@property (nonatomic, strong) NSMutableArray *groceryList;
@end

// First VC
#import "Groceries.h"

@interface TableViewController ()
@property (nonatomic, strong) Groceries *groceries;
@end
@implementation TableViewController
- (void)viewDidLoad 
     [super viewDidLoad];

     _groceries = [[Groceries alloc]init];


// Second VC
#import "Groceries.h"

@interface AddItemViewController ()
@property (weak, nonatomic) IBOutlet UITextView *textView;
@property (nonatomic, strong) Groceries *groceries;
@end
@implementation AddItemViewController
- (void)viewDidLoad 
    [super viewDidLoad];

    _groceries = [[Groceries alloc]init];


// When I press the return button, I'm popping back to First VC
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 

    if([text isEqualToString:@"\n"]) 

        [[_groceries groceryList]addObject:_textView.text];
        [textView resignFirstResponder];
        [[self navigationController]popViewControllerAnimated:YES];
        return NO;
    

    return YES;


@end

【问题讨论】:

好的,如果我退出应用程序会发生什么?并再次启动。你的数组应该如何表现? 新对象仍应存储在groceryList中。 像 NSUserDefaults/coredata/sqlite 这样的持久化数据存储怎么样?您可以使用 NSUserDefaults 处理的最简单和非常少量的数据。 在这里寻求帮助***.com/questions/8727508/… 对 NSObject 使用单例! 【参考方案1】:

有两种方法可以解决这个问题:

    将 Groceries 创建为单例类并使用共享实例来更新数组,它可以在两个 VC 中访问

    使用委托将数据传回给 firstVC

    这是您的情况的经典示例:http://jameslin.herokuapp.com/blog/2013/10/15/hello-world/

    您可以使用 NSNotification 更新数组对象,其中 VC1 将注册通知,VC2 将发布通知并发送通知对象。

【讨论】:

单身似乎是最好的方法。我不知道以前,我只是将新对象分配给数组的 instance,它只是本地的。

以上是关于将数据从视图控制器传递到 NSObject的主要内容,如果未能解决你的问题,请参考以下文章

如何快速将数据从视图控制器传递到容器视图

将数据从视图控制器传递到另一个视图控制器

如何将数据从表视图传递到另一个视图控制器

如何将 JSON 数据从登录视图传递到多个视图控制器,是不是可能?

Swift - 将数据从父视图控制器传递到子视图控制器

Swift:将数据从视图控制器传递到导航控制器