问题描述
我想让用户选择是否在登录页面上存储用户名,所以我的plist有2个键: userIsSaved(bool)和 username(string)
这是我的脚本:
Nsstring *path = [[NSBundle mainBundle] pathForResource:@"userinfo" ofType:@"plist"];
NSMutableDictionary *plistDic = [[NSMutableDictionary alloc] initWithContentsOfFile: path];
BOOL userIsSaved = [[plistDic objectForKey:@"userIsSaved"] boolValue];
Nsstring *username = plistDic[@"username"];
if (lg.saveUserSwitch.isOn){
if (userIsSaved == false){
[plistDic setobject:[NSNumber numberWithBool:YES] forKey:@"userIsSaved"];
plistDic[@"username"] = lg.usernameFld.text;
[plistDic writetoFile: path atomically: YES];
if ([plistDic writetoFile: path atomically: YES] == NO) {
NSLog(@"!!!Save plist file Failed");
}
}
}
我有一些问题:
- 为什么我不能写
plistDic[@"userIsSaved"] = true
来更新bool值?如何正确更新呢?[plistDic setobject:[NSNumber numberWithBool:YES] forKey:@"userIsSaved"]
似乎改变了它的类型。我应该怎么读? - 我无法将plistDic写入plist。我不知道怎么了。 @H_502_22@
-
您不能将布尔值(或整数,浮点数或...)存储到字典中-只能存储对象。因此,您需要先将其转换为对象,在本例中为
NSNumber
。您也可以使用plistDic setObject:@(YES) forKey:@"userIsSaved"]
-
要首先写入,请获取正确目录的路径,该路径通常类似于
解决方法
答案
NSURL * dir = [[NSFileManager.defaultManager URLsForDirectory:NSApplicationSupportDirectory
inDomains:NSUserDomainMask].firstObject
URLByAppendingPathComponent:NSBundle.mainBundle.bundleIdentifier
isDirectory:YES];
然后您可以使用类似
NSString * myFile = [dir.path stringByAppendingPathComponent:@"mylist.plist"];
,然后改为写入myFile
。
注意使用URL也是一个好主意。