[英]How to keep objects in NSMutableArray?
有兩個視圖控制器。一個用於添加項,另一個用於顯示(表視圖)。所有項都存儲在NSMutableArray中。但是每次我展開添加項並回到表視圖時,只有一個剩下的最新商品。
碼:
- (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 = @""; }
如何在視圖控制器之間持久保存NSMutableArray? 如果您需要在整個應用程序中保留一個數組,建議您使用單例 。 單例是每個實例只有一個內存地址的對象,因此始終是同一對象。 您可以通過執行以下操作來完成此操作:
1)按CMD + N鍵,然后選擇“可可接觸類” /子類NSMutableArray
2)轉到該類的.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
都將始終是同一對象。
您可以在兩個視圖控制器之間共享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中使用數組。 也許您更喜歡使用unsegue segue,例如:
// MainViewController.m
- (IBAction)saveItem:(UIStoryboardSegue *)segue {
DetailViewController *detailVC = segue.sourceViewController;
[self.items addObject:detailVC.textFromFirst];
}
在這種情況下,您無需與AddViewController共享NSMutableArray
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.