Ios pList writeToFile字典数组-仅写入最后一个数组项

Ios pList writeToFile字典数组-仅写入最后一个数组项,ios,plist,writetofile,Ios,Plist,Writetofile,我是iOS开发新手,在将字典对象数组写入文件时遇到困难 这是我的密码。。。我认为它应该做到以下几点: // Step 1. Copy the plist in the App bundle and create one in the Documents directory NSError *error; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,

我是iOS开发新手,在将字典对象数组写入文件时遇到困难

这是我的密码。。。我认为它应该做到以下几点:

    // Step 1.  Copy the plist in the App bundle and create one in the Documents directory

NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"Devices.plist"];

NSFileManager *fileManager = [NSFileManager defaultManager];

if (![fileManager fileExistsAtPath: path])
{
    NSString *bundle = [[NSBundle mainBundle] pathForResource:@"Devices" ofType:@"plist"];

    [fileManager copyItemAtPath:bundle toPath: path error:&error];
}



// Step 2). Read my plist into a number of internal arrays.

NSArray *rootArray = [NSArray arrayWithContentsOfFile:path];

nameArray           = [[NSMutableArray alloc] init];
MACArray            = [[NSMutableArray alloc] init];
imageArray          = [[NSMutableArray alloc] init];
blockArray          = [[NSMutableArray alloc] init];
synchronisedArray   = [[NSMutableArray alloc] init];


for (NSDictionary *itemData in rootArray)
{
    [nameArray addObject:[itemData objectForKey:@"name"]];
    [MACArray addObject:[itemData objectForKey:@"MAC"]];
    [imageArray addObject:[itemData objectForKey:@"image"]];
    [blockArray addObject:[itemData objectForKey:@"block"]];
    [synchronisedArray addObject:[itemData objectForKey:@"synchronised"]];
}



// Step 3. Load my internal arrays into an array of dictionaries.

NSMutableDictionary *outData = [[NSMutableDictionary alloc] init];
NSMutableArray *outArray = [[NSMutableArray alloc] init];

for (int i = 0; i<[nameArray count]; i++)
{
    [outData removeAllObjects];

    [outData setValue:[nameArray objectAtIndex:i]         forKey:@"name"];
    [outData setValue:[MACArray objectAtIndex:i]          forKey:@"MAC"];
    [outData setValue:[imageArray objectAtIndex:i]        forKey:@"image"];
    [outData setValue:[blockArray objectAtIndex:i]        forKey:@"block"];
    [outData setValue:[synchronisedArray objectAtIndex:i] forKey:@"synchronised"];


    [outArray addObject: outData];

    NSLog(@"Last object in outArray at %i is %@", i, [outArray objectAtIndex:i]);
    NSLog(@"---------------------------");
}


// Step 4). Write the array back out to the plist.

BOOL result = [outArray writeToFile: path atomically:YES];

if (result)
    NSLog(@"Result YES");
else
    NSLog(@"Result NO");

感谢您的帮助/建议。。。谢谢。

在编写时,现有密钥将被新值覆盖。请用此代码替换上述代码

// Step 3. Load my internal arrays into an array of dictionaries.


NSMutableArray *outArray = [[NSMutableArray alloc] init];

    for (int i = 0; i<[nameArray count]; i++)
    {
         NSMutableDictionary *outData = [[NSMutableDictionary alloc] init]; //add this line here

        [outData setValue:[nameArray objectAtIndex:i]         forKey:@"name"];
        [outData setValue:[MACArray objectAtIndex:i]          forKey:@"MAC"];
        [outData setValue:[imageArray objectAtIndex:i]        forKey:@"image"];
        [outData setValue:[blockArray objectAtIndex:i]        forKey:@"block"];
        [outData setValue:[synchronisedArray objectAtIndex:i] forKey:@"synchronised"];


        [outArray addObject: outData];

        NSLog(@"Last object in outArray at %i is %@", i, [outArray objectAtIndex:i]);
        NSLog(@"---------------------------");
    }
//第三步。将我的内部数组加载到字典数组中。
NSMutableArray*outArray=[[NSMutableArray alloc]init];

对于(int i=0;iThanks)来说,这就解决了问题。我忘记了outArray实际上只是一个指针列表……我所有的条目都指向同一个对象!
// Step 3. Load my internal arrays into an array of dictionaries.


NSMutableArray *outArray = [[NSMutableArray alloc] init];

    for (int i = 0; i<[nameArray count]; i++)
    {
         NSMutableDictionary *outData = [[NSMutableDictionary alloc] init]; //add this line here

        [outData setValue:[nameArray objectAtIndex:i]         forKey:@"name"];
        [outData setValue:[MACArray objectAtIndex:i]          forKey:@"MAC"];
        [outData setValue:[imageArray objectAtIndex:i]        forKey:@"image"];
        [outData setValue:[blockArray objectAtIndex:i]        forKey:@"block"];
        [outData setValue:[synchronisedArray objectAtIndex:i] forKey:@"synchronised"];


        [outArray addObject: outData];

        NSLog(@"Last object in outArray at %i is %@", i, [outArray objectAtIndex:i]);
        NSLog(@"---------------------------");
    }