Tag: 键值编码

类不是关键值编码兼容

我有一个NavigationController ,称为“ViewController”的根视图控制器和称为“SettingsViewController”的第二个视图控制器。 我有一个从“ViewController”的“SettingsViewController”继续工作,直到我试图通过参考出口连接到“SettingsViewController”称为“usernameField”的UITextField 。 当我尝试去SettingsViewController时,我得到以下错误: ***终止应用程序由于未捕获的exception“NSUnknownKeyException”,原因:'[<_TTC6mayfly22SettingsViewController 0x15e72af0> setValue:forUndefinedKey:]:此类不是密钥值编码兼容的密钥usernameField。 当我search到这个错误时,大多数人都说这是由于代码中的参考sockets被删除,而不是在故事板中,或者是这些行中的东西引起的,但是我已经彻底检查过并且已经尝试了多次重新编写文本框。 我可能会做错什么可能导致这个错误?

简单的应用程序错误“这个类不是关键值编码兼容的关键”

我用xib文件创build一个简单的iPhone应用程序,并添加一个button到视图。 创build一个IBOutlet来连接它。 每一次,我启动它,它会崩溃。 完整的错误信息如下:2014-05-03 08:10:19.742testing[1435:a0b] *终止应用程序,由于未捕获的exception 'NSUnknownKeyException',原因:'[setValue:forUndefinedKey:]:这个类不是密钥txtBtn的编码兼容密钥值。 有很多人打这个问题,在回顾了答案后,我认为我的问题是不同的。 代码如下。 #import <UIKit/UIKit.h> @interface XIBViewController : UIViewController { UIButton *txtBtn; } @property (nonatomic, retain) IBOutlet UIButton *txtBtn; @end 创build这个视图控制器的来源: – (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; UIViewController […]

对实例方法使用点符号

我今天正在查看一段代码,注意到这个特定的编码器使用点符号来访问实例方法(这些方法不取值,只是返回值)。 例如: @interface MyClass : NSObject { } -(double)add; @end @implementation MyClass -(double)valueA { return 3.0; } -(double)valueB { return 7.0; } -(double)add { return self.valueA + self.valueB; } @end 他这样做了他的代码和编译器没有抱怨,但是当我在我的代码尝试像上面的例子中,我得到以下错误:“请求成员”valueA“的东西不是结构或联合”。 我错过了什么,有什么想法?

RESTKit:在覆盖之前比较GET对象和本地持久化

核心数据中有一个保存的对象(保留)。 可以说下面是值: //Entity: employee objectID: 1111 firstName: @"Jon" lastName: @"D" modified: @"10:45PM" 现在,我执行一个RKManagedObjectRequestOperation *operation请求。 我设置了operation.savesToPersistentStore = NO; 并开始操作。 该对象被下载并被修改为以下内容: //Entity: employee objectID: 1111 firstName: @"Jonathan" lastName: @"Doe" modified: @"10:55PM" //I have 15 other properties that are either Strings, NSDate, NSNumber, and BOOLs 我相信在这个时候被修改的对象在managedObjectContext 如果Context的modifieddate不同,我想将Context每个attribute与核心数据中保留的attribute进行比较。 如果Context attribute与持久化attribute不同,我需要为每个属性属性触发一个标志。 一旦所有的属性都被窜改,我可以通过保存上下文来覆盖对象。 我想我必须手动检查: if (!([objectInCoreData valueForKey:@"firstName"] isEqualToString:[objectInContext valueForKey@"firstName"])) { firstNameValueChange […]

如何处理':这个类不是密钥$ oid'错误编码的密钥值

我碰到错误(在主题中陈述),因为有一些属性“ID”不存储在返回的JSON中包含“$ oid”的散列。 例如 有时我会得到: “ID”:{ “$ OID”: “4eea972209f47a0028000140”} 其他时间我得到 “ID”: “4eea972209f47a0028000140” 我正在尝试在下面的代码中进行检查以迎合这种不规则性 if ([[question valueForKey:@"id"] valueForKey:@"$oid"]) { question_id = [[question valueForKey:@"id"] valueForKey:@"$oid"]; } else { question_id = [question valueForKey:@"id"]; } 但是,在检查阶段代码失败仍然不起作用。 我怎样才能实现一个支票,以便我只从“$ oid”中提取question_id才存在?

KVO区分willChangeValueForKey和didChangeValueForKey – 都是必要的吗?

根据苹果自己的build议,当手动设置符合KVC / KVO的访问器时,应该包括两个 KVO方法willChange和didChange 。 这是我在所有手动存取器方法中所做的。 但是, observeValueForKeyPath:ofObject:change:context被调用,每个KVC方法的一半(将和做)具有完全相同的字典内容。 使用选项注册观察者时: NSKeyValueObservingOptionPrior观察者仍然被调用两次 – 每一次调用一次 – 再一次使用相同的字典内容,只保存关键字“notificationIsPrior”包含在字典中的区别。 现在,当KVO被用来改变'CPU昂贵'的属性 – 比如改变颜色或者重新绘制一个庞大而复杂的devise,只有在'didChange'的作用下忽略(或者至less分离出)'willChange ”。 在过去,我通过将密钥string转换为返回左移“1”的枚举列表元素,并使用此数字在接收到第一个调用时以32或64位整数设置标志,以及何时该标志在第二秒重置,我执行CPU密集型操作。 然而,这让我感到这是一个不小的开销,为每个案件执行。 有没有人有任何其他“偏好”的方式来区分“willChange”和“didChange”的callback,而不允许相同的处理两次? 我search了苹果公司自己的文档,这个帮助团队大量地提供替代品,但是苹果公​​司自己的文档并没有涉及到这个主题的很多细节,而且这个团队中的一些人也同样遇到了类似的担忧。 在任何情况下都没有提供明确的解决scheme。 如果有人知道更好的方法 – 除了用交替的标志来避免“willChange” – 我会非常感激。 (为什么苹果公司不能在改变词典中join“阶段”键???)

CAT交易没有观察到CALayer子类的属性

我有一个自定义属性的CALayer的子类,声明如下: @interface MyLayer : CALayer @property (nonatomic,retain) NSNumber *customValue; @end @implementation MyLayer @synthesize customValue = _customValue; @end 我想在一个明确的CATranasction里面设置这个属性的animation,所以我使用actionForLayer:forKey:方法设置了一个委托,它返回一个animation,然而[CATransaction begin] … [CATransaction end]里面[CATransaction begin] … [CATransaction end]任何改变[CATransaction begin] … [CATransaction end]不会导致actionForLayer:forKey使用相应的“键”值进行调用。 但是,通过调用setValue:forKey:调整myLayerInstance上的属性并更改myLayerInstance setValue:forKey: 会导致actionForLayer:forKey:正在调用。 看起来这是因为CALayer为未定义属性的键/值编码做了一些mojo。 我如何重新创build这个mojo,以便我可以在MyLayer上声明属性,但是仍然让它们被animation代理人观察到?

从NSArray,KVC获取最大date

我有一个NSDates数组,我想从数组中获取最大的NSDate。 虽然我总是可以sorting和抓住第一个/最后一个,有没有办法做到这一点KeyValueCoding或其他快速的class轮方式? 我知道如果对象具有date属性,我可以使用类似valueForKeyPath @“@ max.date”的东西,但如果对象是date本身呢? 谢谢