有两个视图控制器。一个用于添加项目,另一个用于显示(表格视图)。所有项目都存储在NSMutableArray.But每次放松以添加项目时,当我返回到表格视图时,只剩下最新的项目。
代码:
- (void)viewDidLoad {
[super viewDidLoad];
[self addData];
}
- (void)addData {
if (!self.items) {
self.items = [[NSMutableArray alloc] init];
}
[self.items addObject:self.textFromFirst];
}
// textFormFirst is an NSString which received from the previous view controller
<小时/> 添加视图控制器
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
UINavigationController *nav = [segue destinationViewController];
SecondController *second = [nav.viewControllers objectAtIndex:0];
second.textFromFirst = [self getText]; // get inputed string
self.aTextField.text = @"";
}
答案 0 :(得分:0)
如何在视图控制器之间保持NSMutableArray?如果您需要在整个应用程序中保留一个数组,我建议您使用 singleton 。单例是每个实例只有 1 内存地址的对象,因此始终是同一个对象。您可以通过执行以下操作来完成此操作:
1)按CMD + N并选择&#34; Cocoa Touch Class&#34; / subclass NSMutableArray
2)去那个班级&#39; .m文件并在init
中添加单例static YourNSMutableArray *highlander;
@implementation YourNSMutableArray
- (instancetype)init {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
highlander = [super init];
});
return highlander;
}
3)现在,无论何时在这样的任何视图控制器中创建新实例
if (!self.items) {
self.items = [YourNSMutableArray new];
}
[self.items addObject:self.textFromFirst];
self.items
将始终存储self.textFromFirst
,因为您在应用中创建的任何YourNSMutableArray
始终都是同一个对象。
答案 1 :(得分:0)
您可以在两个视图控制器之间共享NSMutableArray
。只需使用一个属性:
<强> MainViewController 强>:
// .m
@interface MasterViewController ()
@property (nonatomic, strong) NSMutableArray *items;
@end
@implementation MasterViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.items = [NSMutableArray array];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"ShowDetail"]) {
DetailViewController *controller = (DetailViewController *)[segue destinationViewController];
controller.items = self.items;
controller.textFromFirst = @"This is a test";
}
}
@end
<强> AddViewController 强>:
// .h
@interface DetailViewController : UIViewController
@property (nonatomic, copy) NSString *textFromFirst;
@property (nonatomic, strong) NSMutableArray *items;
@end
// .m
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self addData];
}
- (void)addData {
[self.items addObject:self.textFromFirst];
}
这是一个示例项目:https://www.dropbox.com/s/ymum4zivgi0z688/TestUnwindSegue.zip?dl=0
我不知道你为什么在AddViewController中使用数组。也许你更喜欢使用unwind segue,如下:
// MainViewController.m
- (IBAction)saveItem:(UIStoryboardSegue *)segue {
DetailViewController *detailVC = segue.sourceViewController;
[self.items addObject:detailVC.textFromFirst];
}
在这种情况下,您不需要与AddViewController共享NSMutableArray
。