如何在键路径中更改 NSObject 的值?

How can I change a value of an NSObject at a keypath?

我有一个 NSObject,上面有我的个人资料信息。包含我最喜欢的颜色和数字的数组,以及包含我最好朋友的名字的字符串。

{
favoriteColors =     (
    Green,
    Blue,
    Orange
);
favoriteNumbers =     (
    3,
    16,
    20
);
bestFriend = Josh;
}

现在,我想更新我的个人资料信息并将我的 bestFriend 替换为 "Alex"。

我正在寻找可以执行此操作的函数:

[profileInformation replaceAtKeyPath:@"bestFriend" with: @"Alex"];

我尝试的很多事情都会出错,例如"Expression is not assignable",例如

[profileInformation valueForKeyPath:@"bestFriend"] = @"Alex";

你要找的是 KVC (NSKeyValueCoding)

[profileInformation setValue:@"Alex" forKey:@"bestFriend"]

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Protocols/NSKeyValueCoding_Protocol/#//apple_ref/occ/instm/NSObject/setValue:forKeyPath:

另请注意,NSKeyValueCoding 是一种非正式协议,这意味着所有 NSObjects 都会自动遵守它。这就是为什么 Xcode 自动完成将允许您在任何 Objective-C 基础对象

上调用 -setValue:forKey: