以下代码将值保存到多个NSUserDefaults,其中文件名是从存储在.plist中的字符串生成的(例如'storedbook1','storedbook2',其中存储在.plist中的字符串是'book1', 'book2'等)。但是,我只希望一次定位一个NSUserDefault。如何修改代码具体? (例如,如果我想给'storedbook20'赋值3)。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *myListPath = [documentsDirectory stringByAppendingPathComponent:@"books.plist"];
tableData = [[NSArray alloc]initWithContentsOfFile:myListPath];
for (NSDictionary* dict in tableData) {
NSString *key = [NSString stringWithFormat:@"stored%@", dict[@"filename"]];
[standardUserDefaults setObject:[NSNumber numberWithInt:5] forKey: key];
[standardUserDefaults synchronize];
}
示例.plist
<array>
<dict>
<key>title</key>
<string>title1</string>
<key>filename</key>
<string>book1</string>
</dict>
<dict>
<key>title</key>
<string>title2</string>
<key>filename</key>
<string>book2</string>
</dict>
</array>
使用以下代码显示,当我只想一次将5的值添加到一个时,storebook1和storedbook2的值都增加了5(实际的.plist中有两个以上的项目): / p>
NSNumber *checkednew = 0;
checkednew = [standardUserDefaults objectForKey: key];
int checknew = [checkednew intValue];
NSLog(@"%@", key);
NSLog(@"%d", checknew);
密钥的输出是:
storedbook1 五 storedbook2 5
答案 0 :(得分:0)
它们是没有键的值所以如果你想要没有值重复,你可以使用全局cont属性,并在向NSUserDefaults添加新对象时添加+1
for (NSDictionary* dict in tableData) {
NSString *key = [NSString stringWithFormat:@"stored%@", dict[@"check"]];
[standardUserDefaults setObject:[NSNumber numberWithInt:cont] forKey: key];
[standardUserDefaults synchronize];
cont++;
...
}
为了控制您的号码,您可以在保存后将此号码保存在NSUserDefaults中
[standardUserDefaults setObject:[NSNumber numberWithInt:cont] forKey: @"ContValues"];
答案 1 :(得分:0)
当您阅读plist文件时,将获取的密钥名称存储到字典中(而不是保存在NSUserDefaults中)。当您收到用户操作时,从该字典中获取您的密钥名称(storedbookx)并将值保存到NSUserDefaults。这将节省大量的i / o和迭代操作。