0

我有这两个数组 init 和两个不同的 plist 文件,plist 文件在文件夹中而不是在包中,所以是可编辑的。

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

进度列表是空的,简单的是:

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

现在在我看来,我有一个很容易加载的 tableView,我希望元素按在行中,如果它的状态为 0,它会进入进度 plist,为 dog.png 中的 key Image 设置对象,在 progress.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 在两者上)。任何人都可以帮助我吗?我不明白出了什么问题。

4

1 回答 1

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:]; - 你对两个数组都这样做。
于 2013-05-04T23:34:52.587 回答