Objective c 读取plist文件崩溃

Objective c 读取plist文件崩溃,objective-c,ios,plist,read-write,Objective C,Ios,Plist,Read Write,读入未加载: NSFileManager *fileManager = [NSFileManager defaultManager]; if (![fileManager fileExistsAtPath: path]) //4 { NSString *bundle = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"]; //5 [fileManager copyItemAtPath:bundle

读入未加载:

 NSFileManager *fileManager = [NSFileManager defaultManager];

if (![fileManager fileExistsAtPath: path]) //4
{
    NSString *bundle = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"]; //5

    [fileManager copyItemAtPath:bundle toPath: path error:&error]; //6
}

//load in text fields.
NSMutableDictionary *savedData = [[NSMutableDictionary alloc] initWithContentsOfFile: path];

nameField.text = [[savedData objectForKey:@"name"] stringValue];
locationTextField.text = [[savedData objectForKey:@"location"] stringValue];
sectorTextField.text = [[savedData objectForKey:@"sector"] stringValue];
在按钮上写入,单击:

    - (IBAction)writingButton:(id)sender
{
    NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile: path];

    //[data setObject:[NSNumber numberWithInt:value] forKey:@"value"];
    [data setObject:[NSString stringWithString:nameField.text] forKey:@"name"];
    [data setObject:[NSString stringWithString:locationTextField.text] forKey:@"location"];
    [data setObject:[NSString stringWithString:sectorTextField.text] forKey:@"sector"];
}
plist文件:

错误:

2012-09-04 17:03:40.360应用程序[4849:c07]-[\uu NSCFString stringValue]: 已将无法识别的选择器发送到实例0x6aa38f0 2012-09-04 17:03:40.362应用程序[4849:c07]***由于未捕获而终止应用程序 异常“NSInvalidArgumentException”,原因:'-[\uu NSCFString stringValue]:发送到实例0x6aa38f0'的无法识别的选择器


有什么想法吗?干杯。

字典直接存储NSString对象-无需调用名为
-stringValue
的(不存在的)方法。简单地写

nameField.text = [savedData objectForKey:@"name"];
等等


(为什么您认为有必要调用此方法?

字典直接存储NSString对象-不需要调用名为
-stringValue
的(不存在的)方法。简单地写

nameField.text = [savedData objectForKey:@"name"];
等等


(为什么您认为有必要进行此方法调用?

此外,请阅读错误消息。它是用简单易懂的英语写的。我不知道id我需要一个不同的选择器(我在cocos2d之外使用ios应用已经有一个半月了,所以我还在学习)plist中的值已经是String类型,那么为什么要使用[[savedData objectForKey:@“name”]stringValue]来进行类型转换呢。只需使用[[savedData objectForKey:@“name”]等等。@dev6546我明白了:)但是,在NSDictionary的文档中,它清楚地说明了它是如何工作的。另外,请阅读错误消息。它是用简单易懂的英语编写的。我不知道id,我需要一个不同的选择器(我在cocos2d之外使用ios应用已经有一个半月了,所以我还在学习)plist中的值已经是String类型,那么为什么要使用[[savedData objectForKey:@“name”]stringValue]进行类型转换呢?只需使用[[savedData objectForKey:@“name”]等等。@dev6546我明白了:)但是,在NSDictionary的文档中,它清楚地说明了它是如何工作的。非常感谢这一点,您能理解为什么我的按钮单击中的代码不起作用吗?现在阅读工作正常,但书写工作不正常,我也尝试过将代码移动到didClose,但我对此也没有任何乐趣。@dev6546您所说的什么“写入不起作用”?NSMutableDictionary中的值不是已经设置了吗?所有三个都是uiTextFields两个都设置在:-(void)pickerView:(UIPickerView*)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)组件和final只是用键盘设置的。当我关闭和打开应用程序时,它们不会被保存。它会从我的资源文件夹中的plist文件中加载它们。@dev6546当然不是。你没有写出字典的内容。设置字典的内存实例的值显然不会改变文件本身中的值。此外,您无法更新/写入应用程序包中的文件(出于安全原因,它是只读的)-您必须将plist文件存储在Documents或Library目录中,然后使用NSDictionary的
WriteFile:atomically:
方法来实际保存更改。非常感谢这一点,您能理解为什么我的按钮单击中的代码不起作用吗?现在阅读工作正常,但编写工作不正常,我也尝试将代码移动到didClose,但我也不喜欢它。@dev6546“写入不工作”是什么意思?NSMutableDictionary中的值不是已经设置好了吗?所有三个都是uiTextFields,两个都设置在:-(void)pickerView:(UIPickerView*)pickerView没有选择row:(NSInteger)row Incomonent:(NSInteger)组件和final只是用键盘设置的。当我关闭和打开应用程序时,它们不会被保存。它会从我的资源文件夹中的plist文件中加载它们。@dev6546当然不是。你没有写出字典的内容。设置字典的内存实例的值显然不会改变文件本身中的值。此外,您不能更新/写入应用程序包中的文件(出于安全原因,它是只读的)-您必须将plist文件存储在文档或库目录中,然后使用NSDictionary的
writeToFile:atomicaly:
方法实际保存更改。