setValue:forUndefinedKey 这个类不符合键值编码规范

6

我有一个类似于这样的nsmutablearray:

(
        {
        caption = "";
        urlRep = "assets-library://asset/asset.JPG?id=6FC0C2DC-69BB-4FAD-9709-63E03182BEE1&ext=JPG";
    },
        {
        caption = "";
        urlRep = "assets-library://asset/asset.JPG?id=324E4377-0BCD-431C-8A57-535BC0FC44EB&ext=JPG";
    }
)

我正在尝试像这样设置标题的值:

[[[self.form valueForKey:@"photos"] objectAtIndex:indexPath.row] setValue:@"hi" forKey:@"caption"];

([self.form valueForKey:@"photos"] 是一个数组)

但是我得到了:

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<__NSDictionaryI 0xa68ec40> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key caption.'

编辑:

如果我使用 setObject forKey,我会得到:

-[__NSDictionaryI setObject:forKey:]: unrecognized selector sent to instance 0xa6a88f0
 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSDictionaryI setObject:forKey:]: unrecognized selector sent to instance 0xa6a88f0'

我该怎么修复这个问题?

修复此问题的正确代码:

NSMutableDictionary *m = [[[self.form valueForKey:@"photos"] objectAtIndex:indexPath.row ] mutableCopy];
NSMutableArray *array = [self.form valueForKey:@"photos"];
[m setObject:textField.text forKey:@"caption"];
[array replaceObjectAtIndex:indexPath.row withObject:m];

setObject:forKey: 是什么作用? - trojanfoe
@trojanfoe仍然崩溃,已将确切的错误添加到问题中。 - BluGeni
1个回答

22

你出现异常的原因是因为你有一个NSDictionary对象数组,它们无法响应setObject:forKey:(或setValue:forKey:)方法。

你可能希望在接收到这些对象后立即将它们全部转换为NSMutableDictionary对象。


如何将NSDictionary对象数组转换为NSMutableDictionary? - BluGeni
4
使用mutableCopy创建一份副本。 - trojanfoe
明白了,谢谢!我会发布我使用的确切代码,这样可以帮助需要它的任何人。 - BluGeni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接