2012-04-09 2 views
-1

두 개의보기 컨트롤러가 있습니다. 첫 번째 뷰에는 다른 뷰 컨트롤러에 대한 세그 (segue)가 있습니다. 후자의보기 컨트롤러에서 원하는 것은 텍스트 필드에서 오는 항목을 추가 한 다음 단추를 클릭하여 배열에 저장하는 것입니다. 그런 다음이 배열은 NSUserDefaults를 사용하여 저장됩니다.NSUserDefaults를 사용하여 저장된 배열의 값 유지

아래 코드에서 배열에 항목을 성공적으로 저장할 수 있습니다. 이 배열은 NSUserDefaults를 사용하여 저장됩니다. 그러나 첫 번째보기 컨트롤러로 돌아가서 두 번째보기 컨트롤러로 다시 이동하여 배열에 새 항목을 추가하면 이전에 저장 한 항목이 사라졌습니다. 새롭게 추가 된 항목 만 저장되었습니다.

누군가 내가 직렬화를해야한다고 말했는데, 어떻게 완료 되었습니까? 다른 방법이 있는지와, 조언을

@interface AddCardViewController() 

@property (nonatomic, strong)NSMutableArray *nameOfCards; 

@end 


@implementation AddCardViewController 

@synthesize cardNameTextField = _cardNameTextField; 

@synthesize nameOfCards = _nameOfCards; 


// setting my array 
- (NSMutableArray *)nameOfCards 
{ 
    if (!_nameOfCards) _nameOfCards = [[NSMutableArray alloc] init]; 

    return _nameOfCards; 
} 

- (void) viewWillAppear:(BOOL)animated{ 
    [super viewWillAppear:animated]; 

    self.cardNameTextField.delegate = self; 
} 


- (BOOL) textFieldShouldReturn:(UITextField *)textField{ 

    [self.cardNameTextField resignFirstResponder]; 

    return YES; 
} 

- (void)viewDidLoad 
{ 
    //getting the data saved 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    NSMutableArray *cardName = [defaults objectForKey:@"cardName"]; 

    NSLog(@"contents of my array %@", cardName); 

    [super viewDidLoad]; 

} 

- (IBAction)addNewCard:(id)sender { 
    [self.nameOfCards addObject:self.cardNameTextField.text]; 
    NSLog(@"contents :%@", _nameOfCards); 


    // this is how to save the data 

    NSMutableArray *cardName = _nameOfCards; 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    [defaults setObject:cardName forKey:@"cardName"]; 

    [defaults synchronize]; 

    NSLog(@"data saved"); 

} 

@end 
+0

addnewcard 버튼을 클릭하면 nsuserdefaults에 배열이 저장됩니다. 하지만 당신이 그 viewcontroller에 getback하면 배열은 무효가 될 것입니다. u를 추가하면 배열에 저장되고 userdefaults에 저장됩니다. 그래서 매회 array와 userdefaults에 새로운 것을 추가했습니다. –

+0

addNewCard 메서드 - NSUserDefaults에서 nameOfCards로 데이터를 읽은 다음 새 노드를 추가 한 다음 [배열 값 유지 방법] – SVGreg

+0

중복 복제 가능 (http://stackoverflow.com/questions/10069593/how-to- array-of-an-array를 유지) –

답변

0

그렇게 AppDelegate에에 mutablearray을 내하는 .m 파일에

@interface AddCardViewController : UIViewController <UITextFieldDelegate> 

@property (strong, nonatomic) IBOutlet UITextField *cardNameTextField; 

@end 

내 .H 파일에

을 :)하십시오으로 appdidfinishlaunching에 할당하십시오. 그래서 만약 당신이 otherviews에서 뭔가를 추가하면 당신의 데이터를 대체 못해.

아마도 도움이 될 것입니다. 여기

NSMutableArray * = cardName _nameOfCards; 

을 _nameOfCards가 초기화 된 후 처음 디스크를 storato 무엇의 가치를 가지고 cardName에 대한 참조를 확인 한 후, 0 요소로 설정 때문에, 다음과 같이 제 생각에는

0

는 가상의 오류입니다 이제 cardName에는 더 이상 이전 내용이 없으며 새로운 내용 만 포함됩니다. 여기에서 틀렸어.

cardName의 addObject를 _nameOfCards로 설정해야합니다.

도움이 되길 바랍니다.