保存前从plist测试NSmutable数组

时间:2009-09-10 11:38:22

标签: objective-c

我正在尝试制作一个读写.plist文件的可可应用程序。 我可以从.plist中检索信息,写入,但是当一个键(仅限字符串)为空时,应用程序不会写入plist。

这里有一个示例:

-

 (IBAction)saveBoot:(id)sender {
    NSString *errorDesc;
    NSString *bootPath = @"/myplist.plist";
    NSMutableDictionary *plistBootDict = 
        [NSMutableDictionary dictionaryWithObjects:
        [NSMutableArray arrayWithObjects:

                        Rescan,
                    RescanPrompt,
                    GUI,
                    InstantMenu,
                        DefaultPartition,
                    EHCIacquire,
                    nil]

                        forKeys:[NSMutableArray arrayWithObjects: 

                    @"Rescan",
                    @"Rescan Prompt",
                    @"GUI",
                    @"Instant Menu",
                    @"Default Partition",
                    @"EHCIacquire",
                    nil]];

      NSData *plistBootData = [NSPropertyListSerialization 
                        dataFromPropertyList:plistBootDict
                  format:NSPropertyListXMLFormat_v1_0
                  errorDescription:&errorDesc];




        if (bootPath) {
        [plistBootData writeToFile:bootPath atomically:NO];
    }
        else {
            NSLog(errorDesc);
            [errorDesc release];
        }


    }
    @end

我想我需要一个循环来检查每个键是否为空(如果为空则将其删除), 但我尝试了不同的(objectEnumerator,objectForKey:..等)方法whitout成功。

如果有人可以像我一样帮助初学者, 提前谢谢。

罗南。

1 个答案:

答案 0 :(得分:0)

问题可能是因为nil是变量参数列表的终止符,所以如果RescanPromptnil,则对象数组将只包含该部分(所以你不能“删除如果空”,因为它首先不存在于字典中)。你应该一块一块地构建你的字典;类似的东西:

NSMutableDictionary *plistBootDict = [NSMutableDictionary dictionary];

if (Rescan)
    [plistBootDisc setObject:Rescan forKey:@"Rescan"];
if (GUI)
    [plistBootDisc setObject:GUI forKey:@"GUI"];

// etc

(另外,如果您以后永远不会改变它们,则没有理由使用NSMutableArrayNSMutableDictionary。)