簡體   English   中英

如何將對象保留在NSMutableArray中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM