标签: key-value-coding

测试只读属性与set/get键 - obj-c/cocoa

如果我只有一个键列表,是否有一种优雅的方法来测试对象的只读与读/写属性?我意识到我可以把钥匙串起来:

NSString *setterString = [@"set" stringByAppendingString:[someKeyString capitalizedString]];
BOOL isReadWrite = [myObject respondsToSelector:NSSelectorFromString(setterString)];
Run Code Online (Sandbox Code Playgroud)

或者更好的是尝试为密钥设置一个值并检查NSUndefinedKeyException- 但是对非异常行为使用异常似乎是不好的形式.

为了清楚起见,我想以编程方式审计对象的属性,并告诉它们之间的区别,例如,

@property (readonly) NSString *someReadOnlyKey
@property NSString *someReadWriteProperty
Run Code Online (Sandbox Code Playgroud)

编辑:为了清楚,如果将键实现为@propertys或手动getter/setter ,则无关紧要.只关注公共接口.并且感谢您询问我想要实现的目标 - 首先要做到这一点可能更为重要.

我试图勾勒出一些生成对象键的图形表示的代码.所有的密钥都是事先知道的 - 但我不会总是知道哪些密钥可以建立(这取决于特定的子类实现)

cocoa objective-c key-value-coding

3
推荐指数
2
解决办法
1283
查看次数

Cocoa KVC:"类不符合关键值编码"

我正在尝试用KVC更新一些属性.这些属性已经合成.

这条线有效:

myObject.value = intValue;
Run Code Online (Sandbox Code Playgroud)

这不起作用:

[self setValue:[NSNumber numberWithInt:intValue] forKey:@"myObject.value"];
Run Code Online (Sandbox Code Playgroud)

并且爆发: 由于未捕获的异常'NSUnknownKeyException'终止应用程序,原因:'[<MyViewController 0xd1cec0> setValue:forUndefinedKey:]:此类与密钥myObject.value不符合密码值编码.

然而,该方法(awakeFromNib)的其他实例还可以对setValue:forKey:calls做出很好的响应.唯一的区别是这个特定的实例是在IB中创建和连接的.

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

2
推荐指数
2
解决办法
7477
查看次数

Javascript对象键值编码.动态设置嵌套值

我正在开发一个小库,可以让我用对象做一些基本的键值编码.说我有以下对象:

var data = { key1: "value1", key2: { nested1: 1, nested2: "wowza!" } };
Run Code Online (Sandbox Code Playgroud)

我有以下JavaScript函数:

var setData = function(path, value) {
    eval("data." + path + "= value;");
};
Run Code Online (Sandbox Code Playgroud)

在使用中:

setData("key1", "updated value1"); // data.key1 == "updated value1"
setData("key2.nested1", 99); // data.key2.nested1 == 99
Run Code Online (Sandbox Code Playgroud)

这是有效的,但是我想在不使用的情况下完成上述操作eval.这是可能的,还是eval最好的方法?

编辑:

注意可以假设您设置的值存在,至少对于路径深度 - 1.我更关心设置现有对象的值.

javascript object key-value-observing key-value-coding

2
推荐指数
1
解决办法
7960
查看次数

应该采取哪些步骤将我的XML转换为Core Data对象?

我有一个XML文件,其中包含商店列表,简化版本如下.我想要帮助的是关于将这些数据移动到Core Data中的存储对象的最简单方法的一些高级想法.我看到关于键值对的建议,但正如您在下面的示例中所看到的,我有相同名称/键的子元素,并且每个商店元素可以有任意数量的这些元素.

我打算在应用程序中存储这些对象以供将来使用(它们将在地图上注释).因此,需要存储每个重复的字段,其中一个是不够的.我知道如何在核心数据中对其进行建模我相信,我将拥有一个电话号码实体和一个商店实体,并将基于这两者联系起来<store-id>.我只是尝试使用一种简单的方法通过其他数据结构将它们从XML移动到Core Data.

XML示例:

<stores>
  <store>
   <store-id>1</store-id>
   <city>Dublin</city>
   <phone>011234567</phone>
   <phone>011234566</phone>
   <owner>Joe Bloggs</owner>
  </store>
  <store>
   <store-id>2</store-id>
   <city>Cork</city>
   <phone>019876543</phone>
   <phone>019876542</phone>
   <owner>Joe Bloggs</owner>
  </store>
<stores>
Run Code Online (Sandbox Code Playgroud)

如果键值对是要走的路,请指出我可以考虑重复元素的方法.如果还有另一种方式,我会全力以赴.

谢谢

xml cocoa cocoa-touch core-data key-value-coding

2
推荐指数
1
解决办法
1143
查看次数

关键值编码基元

我有一些自动反序列化代码,它将使用KVC设置对象的属性.我需要为基元(int,double,float)添加反序列化支持,但我无法(或不确定如何)使用带有基元的" setValue:forKey: ".必须在运行时执行属性查找.有任何想法吗?谢谢.

cocoa objective-c key-value-coding

2
推荐指数
1
解决办法
922
查看次数

为什么没有setValue:forKeyPath在可变字典上调用抛出未知密钥路径的异常?

我有以下代码:

NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[defs setObject:[NSNumber numberWithInt:100] forKey:@"test1.test2.test3"];
[defs setValue:[NSNumber numberWithInt:10] forKeyPath:@"test2.test3.test4"];
Run Code Online (Sandbox Code Playgroud)

据我所知,它setObject:forKey:创建了"test1.test2.test3"键和给定数字对象之间的关联.另一方面,setValue:forKeyPath:Key-Value-Coding方法试图找到路径"test2.test3.test4"的对象,但最后,它只是默默地做什么.它甚至没有修改字典!

令我困惑的是,setValue:forKeyPath:它不会引发任何异常,也不会报告任何错误.为什么是这样?这种行为记录在哪里吗?

objective-c key-value-coding

2
推荐指数
1
解决办法
3468
查看次数

键值编码 - setValue:forKey:其中value为NULL

我正在阅读文档,说明setValue:forKey:会将NULL值视为被删除.然而,我有一个例如以下一直在崩溃的例子:

[myObj setValue:[aDictionary valueForKey:@"keyDoesNotExist"] forKey:@"anotherKey"];

如果aDictionary不包含密钥,这行代码会崩溃keyDoesNotExist.那有什么办法吗?在这里做什么是合适的?

myObj是一个实例NSManagedObject."anotherKey"是一对多的关系,myObj可以包含许多"anotherKey".

iphone objective-c key-value-coding

2
推荐指数
1
解决办法
3836
查看次数

Objective-C运行时 - 如何使用setValue设置CGRect

当该属性是CGRect时,如何设置实例的属性.我想做这个:

CGRect rect = CGRectFromString(value);
[localClassObjectInstance setValue:rect forKey:key];
Run Code Online (Sandbox Code Playgroud)

但编译器不喜欢setValue; 它说我将CGRect发送到不兼容类型'id'的参数.

谢谢

objective-c key-value-coding

2
推荐指数
1
解决办法
2497
查看次数

为什么我的NSManagedObject不符合KVC?

我正在尝试使用KVC来检索使用Core数据构建的自定义NSManagedObject实体的属性值.我在尝试访问几层深处的属性时遇到UnknownKeyException,而对于我的生活,我无法弄清楚为什么......

根实体称为"Catch".它有许多属性:权重,长度等.它还与另一个称为"物种"的实体有一对一的关系.Species有一个名称属性,定义为NSString.

所以:

//this will output the species name (i.e. "Brook Trout")
NSLog(@"Catch.species.name = %@", catch.species.name);

//this will throw a NSUnknownKeyException
NSLog(@"Catch.species.name = %@", [catch valueForKey:@"species.name"]);

//but this works...!?
Species *species = (Species*)[catch valueForKey:@"species"];
NSLog(@"Species.name = %@", species.name);
Run Code Online (Sandbox Code Playgroud)

具体的例外细节是:

*由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[valueForUndefinedKey:]:实体Catch不是密钥值编码兼容的密钥"species.name".

有谁比我更了解这些东西知道发生了什么事吗?

提前致谢!

core-data objective-c key-value-coding ios ios5

2
推荐指数
1
解决办法
1272
查看次数

自定义类NSObject不符合键值编码

可能重复:
为什么我的对象不符合键值编码?

我有一个字典,我想将键/值添加到自定义类,但我总是得到错误,该类不符合KVC,但Apple文档声明它应该是.

我的代码:

ContactObject.h:

@interface ContactObject : NSObject
     + (ContactObject *)testAdding;
@end
Run Code Online (Sandbox Code Playgroud)

ContactObject.m:

@implementation ContactObject

- (id)init {
    self = [super init];
    if (self) {
        // customize

    }

    return self;

}

+ (ContactObject *)testAdding
{
    // create object
    ContactObject *theReturnObject = [[ContactObject alloc] init];

    [theReturnObject setValue:@"Berlin" forKey:@"city"];
    [theReturnObject setValue:@"Germany" forKey:@"state"];

    return theReturnObject;

}

@end
Run Code Online (Sandbox Code Playgroud)

我想我错过了一些非常愚蠢的东西:)

请,任何帮助表示赞赏......

问候,马提亚

objective-c key-value-coding nsobject kvc

2
推荐指数
1
解决办法
7450
查看次数