0

私は Objective-C プログラミングの初心者で、NSMutableArray で問題が発生しました ...

1回目はちゃんとデータが保存されているのですが、2回目もやり直したい場合は1回目は上書き保存されて新しく保存されます。

理解するための例:

最初の試行:

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

2回目の試行:

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

助けてくれてありがとう:)

4

2 に答える 2

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];
}
于 2013-03-19T19:52:16.727 に答える
1

これは、新しい辞書を追加しようとするたびに、同じ可変辞書を変更しているためです。次のように行を変更します。

[tabObjets insertObject:[tabObjet copy] atIndex:numItems];
于 2013-03-19T19:52:00.130 に答える