尝试读取plist并根据在以下设置包中选择的选项更改我的字体颜色。
以下是我试图完成它的方法:
NSString *path = @"/var/mobile/Library/Preferences/NCNotes.plist";
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path];
fontSize = [[dict objectForKey:@"slideSwitched"] floatValue];
if ([[dict objectForKey:@"noteColor"] valueForKey:@"Purple"]) {
noteView.textColor = [UIColor purpleColor];
} else {
noteView.textColor = [UIColor blackColor];
}
为什么这就是我的应用程序崩溃的原因?如何读取值并根据所选内容更改颜色?
答案 0 :(得分:1)
看来你的plist的顶层是一个数组,而不是字典,因为在顶部它表示"项目1"所有内容都在其中。所以你在一个数组中有一个字典。所以你可以改变你的代码:
NSString *path = @"/var/mobile/Library/Preferences/NCNotes.plist";
NSArray *array = [[NSArray alloc] initWithContentsOfFile:path];
NSDictionary *dict = array[0];
您还可以更改plist的结构,以便将字典作为根而不是数组。
此外,键应该在左侧,而它们的值在右侧,所以我没有看到键#34; noteColor"。你有一把钥匙"钥匙"使用值" noteColor",因此您需要进行更正。我也没有看到" slideSwitched"键,虽然它可能超出了你的截图范围。
以下工作也没有成功:
[[dict objectForKey:@"noteColor"] valueForKey:@"Purple"]
无论你从[dict objectForKey:@"noteColor"]
得到什么都不会成为字典,所以打电话给valueForKey:
就不会给你你想要的东西。
答案 1 :(得分:0)
只需使用文档目录
即可 NSString *contentPath=[[NSBundle mainBundle] pathForResource:@"PLIST_FILE_NAME" ofType:@"plist"];
NSDictionary *dictionary=[NSDictionary dictionaryWithContentsOfFile:contentPath];
在此之后写下你的逻辑,等一下,它似乎也没有一个键“noteColor”。检查你的plist
答案 2 :(得分:0)
以下是wazoo记录的一些示例代码。希望它能帮助您理解这些词典和词典的工作原理。一切都将基于你的plist文件(这肯定可以改进,但由于我不了解你的具体情况,这取决于你)。
您的问题是"如何根据用户选择找到颜色?"我假设您将用户选择作为int。类似于"用户选择了7"。
//Load your plist dictionary
NSString *path = @"/var/mobile/Library/Preferences/NCNotes.plist";
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path];
//Get the array of validValues and the array of validTitles
NSArray *valuesArray = [dict objectForKey:@"validValues"];
NSArray *titlesArray = [dict objectForKey:@"validTitles"];
//Now get the user selected index from the validValues array
int arraySelection = -1;
for(int i = 0; i < [valuesArray count]; i++)
{
NSNumber *number = [valuesArray objectAtIndex:i];
if([number intValue] == userSelectedInput)
{
arraySelection = i;
break;
}
}
if(arraySelection == -1)
{
//Not found in array
return;
}
//Now with that index get the title of the object that the user selected
NSString *userSelectedTitle = [titlesArray objectAtIndex:arraySelection];
//Now do your checking on what the user selected based on that:
if([userSelectedTitle isEqualToString:@"Purple"])
...
你可以把它煮得相当多。目前,您的validValues
数组完全没用。如果它出现故障或缺少数字则需要,但可以通过validTitles数组实现直接计数。