2013-03-19 83 views
0

取代旧的对象,我用Objective-C编程新手,我得到了我的NSMutableArray一个问题...NSMutableArray里总是最后一个

当我做出的第一次尝试,我的数据都是很好保存,但如果我想进行第二次尝试,第一次被新的覆盖,新的也被保存。

个例理解:

第一次尝试:

Tabobjets : (
     { 
     Contact = 1; 
     DateARendre = 1; 
     DateJour = "2013-03-19 19:27:29 +0000"; 
     Nom = 1; 
     Rendu = 0; 
     Titre = 1; 
    } 
) 

第二次尝试:

Tabobjets : (
     { 
     Contact = 2; 
     DateARendre = 2; 
     DateJour = "2013-03-19 19:27:40 +0000"; 
     Nom = 2; 
     Rendu = 0; 
     Titre = 2; 
    }, 
     { 
     Contact = 2; 
     DateARendre = 2; 
     DateJour = "2013-03-19 19:27:40 +0000"; 
     Nom = 2; 
     Rendu = 0; 
     Titre = 2; 
    } 
) 

这里是我的代码

@interface SecondViewController() { 
    NSMutableDictionary *tabObjet; 
    NSMutableArray *tabObjets; 
    NSString *appFile; 
} 

@end 

@implementation SecondViewController 

- (void)viewWillAppear:(BOOL)animated{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    // the path to write file 
    appFile = [documentsDirectory stringByAppendingPathComponent:@"Bigre.plist"]; 

    if (tabObjets == nil) { 
     tabObjets = [[NSMutableArray alloc] initWithContentsOfFile:appFile]; 
    } 

    if (tabObjet == nil) { 
     tabObjet = [[NSMutableDictionary alloc] init]; 
    } 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (IBAction)saisieReturn :(id)sender{ 
    [sender resignFirstResponder]; 

    NSLog(@"Tabobjet avant : %@",tabObjet); 
    NSLog(@"Tabobjets avant : %@",tabObjets); 

    //inscription dans un dictionnaire 
    [tabObjet setObject:_titreObjet.text forKey:@"Titre"]; 
    [tabObjet setObject:_nomPersonne.text forKey:@"Nom"]; 
    [tabObjet setObject:_infoContact.text forKey:@"Contact"]; 
    [tabObjet setObject:[NSDate date] forKey:@"DateJour"]; 
    [tabObjet setObject:_dateARendre.text forKey:@"DateARendre"]; 
    [tabObjet setObject:[NSNumber numberWithBool:NO] forKey:@"Rendu"]; 

    int numItems = [tabObjets count]; 
    [tabObjets insertObject:tabObjet atIndex:numItems]; 

    NSLog(@"Tabobjet apres : %@",tabObjet); 
    NSLog(@"Tabobjets apres : %@",tabObjets); 

    //écriture dans un fichier plist 
    [tabObjets writeToFile:appFile atomically:YES]; 
} 

@end 

非常感谢您的帮助:)

+1

请详细说明问题。而且,仅供参考,TabObjets是一个可变数组,而不是字典,因此其行为如预期。我错过了什么? – Monolo 2013-03-19 19:47:34

+0

对不起,但我不是英文^^,并得到了一些问题要非常明确。 如你所说,如果我的数据被NSMutableArray覆盖是正常的? – Glou94 2013-03-19 19:53:44

+0

是的,这是正常的。在第一次运行中,您添加一个对象并保存该数组。在第二次运行中,您用第一个对象读取数组,添加一个新数组,这样该数组就有两个项目。然后你保存它。它应该是。 – Monolo 2013-03-19 19:57:09

回答

2

你覆盖你的tabObjet。只需在saisieReturn:内部声明并将其更改为

- (IBAction)saisieReturn :(id)sender{ 
    [sender resignFirstResponder]; 

    NSLog(@"Tabobjets avant : %@",tabObjets); 

    //inscription dans un dictionnaire 
    tabObjet = [[NSMutableDictionary alloc] init]; 
    [tabObjet setObject:_titreObjet.text forKey:@"Titre"]; 
    [tabObjet setObject:_nomPersonne.text forKey:@"Nom"]; 
    [tabObjet setObject:_infoContact.text forKey:@"Contact"]; 
    [tabObjet setObject:[NSDate date] forKey:@"DateJour"]; 
    [tabObjet setObject:_dateARendre.text forKey:@"DateARendre"]; 
    [tabObjet setObject:[NSNumber numberWithBool:NO] forKey:@"Rendu"]; 

    [tabObjets addObject:tabObjet]; 

    NSLog(@"Tabobjet apres : %@",tabObjet); 
    NSLog(@"Tabobjets apres : %@",tabObjets); 

    //écriture dans un fichier plist 
    [tabObjets writeToFile:appFile atomically:YES]; 
} 
+0

非常感谢,它运作良好:) – Glou94 2013-03-19 19:59:54

1

这是因为您每次尝试添加新变量时都会修改相同的可变字典。修改你的线,如:

+0

我选择蒂洛的一个,但非常感谢,它运作良好;) – Glou94 2013-03-19 20:03:21