Tag: kvc

计算的BOOL属性使用valueForKey返回带有incorect值的NSNumber:

我有一个简单的对象有一个NSNumber用于存储一些标志。 我有一个实际上确实的getter方法: [self.flags integerValue] & SomeConstantFlag 为属性@property (readonly, nonatomic, assign) BOOL someConstantFlag 当访问基础布尔值时,这工作正常 model.someConstantFlag 但是当我尝试 id value = [model valueForKey:@"someConstantFlag"]; 然后它返回一个错误的布尔表示,例如NSNumber的值为2,4等等。为什么当这个属性的声明是BOOL时会发生这种情况? 有一个“漂亮”的方法来克服这个问题? 另一方面包装工作正常: BOOL someBool = 42; NSNumber* numberVal = @(someBool); //The underlying is an __NSCFBoolean with the proper 0/1 val!

iOS中的关键值编码与访问器方法

我试图理解与KVC相关的Objective C中的一些理论部分。 以下是我所做的例子。 我有类调用Cookie,它有一个像下面的属性 @property NSString *name; 接下来,我有另一个类调用Person,它有以下属性 @property Cookie *cookie; 内部Person实现文件 #import "Cookie.h" – (id)init { self = [super init]; if (self) { _cookie = [[Cookie alloc] init]; } return self; } 在我的ViewContrtoller中,我可以编写以下两个选项来获得相同的结果。 使用KVC: [me valueForKeyPath:@"cookie.name"] 使用访问器方法: [[me cookie] name] 为了编写访问器方法,我不得不导入Cookie类,但在使用KVC时不需要。 除此之外,使用KVC代替或使用访问器方法有什么好处? 是否有任何性能问题或安全问题,良好的编码习惯或其他好处?

核心数据setValue一次为多个属性

我在Core Data中有一个Book实体,并且有一个Book类作为模型层。 我的书模型有多个属性。 何时该坚持Core Data的书籍,我想存储它们而不必做 bookObject.setValue(book.title , forKey: "name") bookObject.setValue(book.author , forKey: "author") bookObject.setValue(book.datePublished , forKey: "datePublished") etc… 是否有一个方法类似setValue一次设置多个CoreData实体属性?

优先使用属性访问器或KVC样式来访问Core Data属性

我已经阅读了Marcus S. Zarra的iOS数据存储和pipe理iOS OS X和iCloud (第二版)的iOS相关章节,以获得巨大收益。 但是,我想知道一个方面,这本书提出了一个与我自己不同的风格。 本书的示例通过使用KVC访问NSManagedObject的属性和关系(例如[recipe valueForKey: @"name"] )。 对于如何定义属性访问器(例如在recipe.name使用),有(仅)两个简单的解释。 这似乎暗示了KVC有利于财产访问者的明确build议。 我一般喜欢属性访问器,例如,因为他们防范错误导致的错误(例如[recipe valueForKey: @"nam"] ),因为Xcode可以为我生成它们的源代码( Editor | Create NSManagedObject Subclass )。 我的问题是这样的:有什么技术上的原因,为什么一个人应该使用KVC,而不是一般的财产访问或风格?