2016-05-08 14 views
0

NSMutableArrayを持つNSObjectにアクセスする2つのビューコントローラがあります。最初のVCは配列のオブジェクトを読み込むテーブルビューで、2番目のVCはオブジェクトを追加する場所です。 2番目のVCから最初のVCへの私のpopViewControllerAnimatedが新しいオブジェクトが失われ、最初のVCはでもviewWillAppearのテーブルビューをリロードするときだけロードします。View ControllerからNSObjectへデータを渡す

  1. 2番目のVCからNSMutableArrayに渡す新しいオブジェクトはなぜ紛失しますか?
  2. どのVCからでもアクセスできるNSMutableArrayにオブジェクトを追加していることを確認するにはどうすればよいですか?

私はNSMutableArray *groceryListを持っているタイプNSObjectGroceriesクラスを、持っています。

// 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 
+0

私はアプリを終了するとどうなりますか?再度起動します。あなたの配列はどのように振る舞いますか? – Alok

+0

新しいオブジェクトはまだ 'groceryList'に格納されます。 – chicobermuda

+0

NSUserDefaults/coredata/sqliteのような永続データストアはどうですか? NSUserDefaultsで行えるデータの中で最もシンプルで非常に少量です。 – Alok

答えて

1

あなたがこれを近づくことができる2つの方法があります。

  1. がシングルトンクラスとして食料品を作成し、配列を更新するために、それはVC

  2. の両方にアクセスできるようになり共有インスタンスを使用します

    委任を使用してfirstVCにデータを戻す

    ここでは、あなたの状況の典型的な例を示します。http://jameslin.herokuapp.com/blog/2013/10/15/hello-world/

  3. NSNotificationを使用すると、VC1が通知用に登録し、VC2が通知を送信して通知オブジェクトを送信する配列オブジェクトを更新できます。

+0

シングルトンが最善の方法であるようです。以前は、ローカルの配列**の**インスタンス**にのみ新しいオブジェクトを割り当てていました。 – chicobermuda

関連する問題