plist更新数据的数组

时间:2013-05-04 11:13:12

标签: iphone xcode arrays sdk plist

我有两个不同的plist文件的两个数组init,plist文件位于文件夹内,不在包中,因此可以编辑。

progress = [[NSMutableArray alloc] initWithContentsOfFile:[self progressFilePath]];
    easy = [[NSMutableArray alloc] initWithContentsOfFile:[self easyFilePath]];

进展plist是空的,简单就是:

<array>
    <dict>
        <key>TitleEN</key>
        <string>Hunter</string>
        <key>Status</key>
        <integer>0</integer>
        <key>Image</key>
        <string></string>
    </dict>
</array>

现在在我的视图中我有一个tableView加载easy,我希望元素按下行,如果它的状态为0则转到进度plist,为dog.png中的关键Image设置对象正在进行中。 plist还为关键状态设置了对象0但在简单状态中。我用这个做了一切:

NSNumber *status = [[easy objectAtIndex:indexPath.row] objectForKey:@"Status"];
    if ([status intValue] == 0) {

            [progress addObject:[easy objectAtIndex:indexPath.row]];

        int progresstot = [progress count];
        for (int i=0; i<progresstot; i++) {
            if ([[progress objectAtIndex:i] objectForKey:@"TitleEN"] == [[easy objectAtIndex:indexPath.row] objectForKey:@"TitleEN"]) {
                [[progress objectAtIndex:i] setObject:@"dog.png" forKey:@"Image"];
            }
        }
            [progress writeToFile:[self progressFilePath] atomically:YES];
[[easy objectAtIndex:indexPath.row] setObject:[NSNumber numberWithInt:1]        forKey:@"Status"];
             [easy writeToFile:[self easyFilePath] atomically:YES];
      }

一切正常,但我无法理解为什么在这个方法的最后我有我的progress.plist与我的元素dog.png但我也有dog.png轻松的。 (状态仅在easy上更新,并且在两者上都很好但是dog.png)。 有人可以帮帮我吗?我无法理解什么是错的。

1 个答案:

答案 0 :(得分:0)

[progress addObject:[easy objectAtIndex:indexPath.row]];

将对象 p1 == [easy objectAtIndex:indexPath.row] 添加到进度数组,现在进度数组保留为 p1 并将其作为其元素之一。它没有创建新对象,它保留了现有的 - p1

for (int i=0; i<progresstot; i++) {
    if ([[progress objectAtIndex:i] objectForKey:@"TitleEN"] == 
            [[easy objectAtIndex:indexPath.row] objectForKey:@"TitleEN"]) 
    {
        [[progress objectAtIndex:i] setObject:@"dog.png" forKey:@"Image"];
    }
}
  • 在if语句中,你想要比较对象的内容,而不是指针,我猜。
  • 再一次,在两个数组中,你都有指向同一个对象的指针( p1 ),所以当你执行 [p1 setObject:forKey:]; 时 - 你会这样做对于两个阵列。