将数据从视图控制器传递到 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的主要内容,如果未能解决你的问题,请参考以下文章