标签: key-value-coding

如何观察对象实例的创建/销毁?

我被KVC/KVO迷住了.超级强大.但是有一个问题.我试图成为真正的MVC道德,但我认为没有办法使用观察模式来监视Objective-C类实例的分配或释放.

这实际上很重要,因为我有一个模型具有细粒度的内部消息,我想从控制器(或委托)观察.对我来说,绊脚石是我没有看到,在模型外部,我可以删除一个即将被解除分配的子组件的观察者,而控制器不知道模型的内部逻辑会破坏封装.

有人可以为这种情况建议一种方法.

谢谢,道格

cocoa objective-c key-value-observing key-value-coding

4
推荐指数
1
解决办法
804
查看次数

在NSPredicates中使用关键路径

我有一个NSDictionary,其中包含(我的自定义)GTPerson对象.GTPerson有一个NSMutableSet *parents属性,我使用@property@synthesize.

在我的NSDictionary之外,我想过滤掉所有没有父母的GTPerson对象,即父母的数量是0.

我正在使用以下代码:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"parents.count = 0"];
NSArray *np = [[people allValues] filteredArrayUsingPredicate:predicate];
Run Code Online (Sandbox Code Playgroud)

当我执行此操作时,我收到以下错误:

[<GTPerson 0x18e300> valueForUndefinedKey:]: this class is not key value coding-compliant for the key count.

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<GTPerson 0x18e300> valueForUndefinedKey:]: this class is not key value coding-compliant for the key count.'

为什么它试图调用countGTPerson而不是它的parents属性?

objective-c key-value-observing key-value-coding

4
推荐指数
1
解决办法
4616
查看次数

KVO岩石.现在我如何异步使用它?

我在KVO上卖,但如果以明显的方式使用它是同步的.我想在我快速连续发射许多KVO消息的情况下使用它,这导致我的应用程序在处理KVO消息时停止运行.有人可以建议一种方法 - 也许使用NSOperationNSThread- 这将在这里工作?

我的目标是尽可能保持KVO的分离,灵活性.

iphone cocoa-touch key-value-observing key-value-coding

4
推荐指数
1
解决办法
4714
查看次数

如何以编程方式监视KVC对象?

我正在尝试通过代码监视NSMutableArray以进行更改.我想在数组更改时添加一个观察者,但是我没有看到NotificationName应该是什么来实现这一点.

基本上,当修改数组时,我想执行自定义选择器.

macos xcode objective-c key-value-observing key-value-coding

4
推荐指数
1
解决办法
1627
查看次数

4
推荐指数
1
解决办法
1460
查看次数

从NSArray,KVC获得最大日期

我有一个NSDates数组,我想从数组中获取最大的NSDate.虽然我总是可以对它们进行排序并抓住第一个/最后一个,但是有没有办法用KeyValueCoding或其他一些快速的单行方式来做到这一点?我知道如果对象有一个日期属性,我可以使用像valueForKeyPath @"@ max.date"这样的东西,但如果对象是日期本身怎么办?

谢谢

cocoa-touch objective-c nsdate key-value-coding ios

4
推荐指数
1
解决办法
3225
查看次数

在哪种情况下,对象不符合键值编码?

目前我正在学习关键值编码的所有内容.

他们在文档中说:

密钥路径序列中的任何不符合适当密钥的键值编码的对象都会收到valueForUndefinedKey:消息.

我试图想象一个对象不符合键值编码的情况.怎么会发生这种情况?当我将UIView子类化时,这显然是合规的,对吧?但是当我用NSObject作为超类创建自己的对象时,那是怎么回事?当我创建一个没有超类的类时,那么肯定这不符合kv吗?

iphone key-value key-value-coding

3
推荐指数
1
解决办法
4154
查看次数

绑定到Cocoa中的类方法?

如果我有一个像这样的方法:

@interface CharacterSet
    + (NSArray *)allCharacterSets;
@end
Run Code Online (Sandbox Code Playgroud)

我可以使用Cocoa绑定绑定它吗?

我正在尝试将NSComboBox的内容值连接到它.当我进入CharacterSet.allCharacterSetsIB中的"模型密钥路径"字段时,它不起作用,说:

[addObserver:forKeyPath:@"CharacterSet.allCharacterSets"选项:0x0上下文:0x200275b80]被发送到与"CharacterSet"属性不符合KVC的对象.

我不知道还有什么可以尝试的.目前我必须allCharacterSets在我的自定义窗口控制器(或自定义窗口)中将返回值存储到ivar中以使其工作,这似乎是我不应该采取的额外步骤.

static-methods key-value-coding cocoa-bindings

3
推荐指数
1
解决办法
549
查看次数

Objective-C协议的默认实现

setValue:forKeyPath:在Apple的NSKeyValueCoding协议文档中的方法讨论开始于:

这种方法的默认实现[...]

现在,这可能只是让我陷入了语义,但是:

  1. Objective-C协议如何具有默认实现
  2. 由于NSObject似乎不符合此协议,如何能够在自己的NSObject子类中利用此默认实现

cocoa protocols objective-c key-value-coding

3
推荐指数
1
解决办法
836
查看次数

NSUserDefaults setValue和objectForKey

你能用:

[[NSUserDefaults standardUserDefaults] setValue:objectID forKey:"objectID"]

设置对象NSUserDefaults,然后使用以下方法检索该对象:

objectType *tempObject = [[NSUserDefaults standardUserDefaults] objectForKey:@"objectID"]

所以要澄清,我要问的是,如果我使用setObject,我可以使用valueForKey吗?反之亦然,我可以使用setValue然后使用它来检索它objectForKey吗?

你为什么不能这样做?

如果我正确阅读,setObject/ objectForKey处理NSDictionarysetValue/或valueForKey处理KVC,对吗?

我只是想要更好地了解两者之间的差异.

谢谢.干杯.

key key-value-coding nsuserdefaults ios

3
推荐指数
1
解决办法
2395
查看次数