标签: key-value-coding

使用点表示法作为实例方法

我今天看了一段代码并注意到这个特定的编码器使用点符号来访问实例方法(这些方法不接受值,它们只返回值).

例如:

@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
Run Code Online (Sandbox Code Playgroud)

他通过他的代码完成了这个并且编译器没有抱怨,但是当我在我的代码中尝试它时,如上面的例子我得到以下错误:"请求成员"valueA"在某个结构或联合的东西中".我想念的是什么?

iphone objective-c key-value-coding ios

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

删除Dealloc中的Observer

解决的 -事实证明,传递nilremoveObserver:forKeyPath:失败,但只有在手动内存管理.它在垃圾收集模式下工作正常.Apple文档并没有说它需要非零值,所以我假设它是一个bug.

我有一个对象,它将自己添加为自身的观察者,通过[self addObserver:self forKeyPath:等等.在我的-dealloc方法中(注意我使用的是保留计数而不是垃圾收集器)我调用[self removeObserver:self forKeyPath:nil];哪个应该有效.但是,我收到以下错误:

Cannot remove an observer <Snapshot 0x10047a6d0> for the key path "(null)" from <Snapshot 0x10047a6d0> because it is not registered as an observer.
Run Code Online (Sandbox Code Playgroud)

现在,如果我删除该行,因此它不会自行删除,我收到此消息:

An instance 0x100193580 of class Snapshot was deallocated while key value observers were still registered with it. Observation info was leaked, and may even become mistakenly attached to some other object. Set a breakpoint on NSKVODeallocateBreak to stop here in the debugger. …
Run Code Online (Sandbox Code Playgroud)

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

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

CATransaction没有观察到CALayer子类的属性

我有一个CALayer自定义属性的子类,声明如下:

@interface MyLayer : CALayer
    @property (nonatomic,retain) NSNumber *customValue;
@end
@implementation MyLayer
    @synthesize customValue = _customValue;
@end
Run Code Online (Sandbox Code Playgroud)

我想在显式内部对此属性进行动画处理CATranasction,因此我使用actionForLayer:forKey:实现的方法设置一个委托,该方法返回一个动画,但是对someMyLayerInstance.customValue内部的任何更改[CATransaction begin] ... [CATransaction end]都不会导致actionForLayer:forKey使用相应的"key"值进行调用.

然而,通过调用MyLayer来修改属性并进行更改导致调用.myLayerInstancesetValue:forKey: actionForLayer:forKey:

看起来这是因为CALayer对于未定义属性的键/值编码有一些mojo.我如何重新创建这个mojo以便我可以声明属性MyLayer,但仍然可以让动画委托观察它们?

iphone core-animation key-value-coding ios

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

读取文件并获取key = value,而不使用java.util.Properties

我正在构建一个RMI游戏,客户端将加载一个文件,其中包含一些键和值,这些键和值将用于几个不同的对象.这是一个保存游戏文件,但我不能使用java.util.Properties(它在规范下).我必须读取整个文件并忽略注释行和在某些类中不相关的键.这些属性是唯一的,但可以按任何顺序排序.我的文件当前文件如下所示:

# Bio
playerOrigin=Newlands
playerClass=Warlock
# Armor
playerHelmet=empty
playerUpperArmor=armor900
playerBottomArmor=armor457
playerBoots=boot109
etc
Run Code Online (Sandbox Code Playgroud)

这些属性将根据播放器的进度进行编写和放置,文件读取器必须到达文件末尾并仅获取匹配的键.我尝试了不同的方法,但到目前为止,没有什么能与我使用java.util.Properties的结果接近.任何的想法?

java file-io properties key-value-coding file-read

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

目标C中的动态对象属性名称

我正在尝试使用动态名称访问对象的属性...这可能吗?

喜欢在javascript中:

var foo = 'bar';
appr.templates[foo];
Run Code Online (Sandbox Code Playgroud)

想法是访问 appr.templates.bar

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

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

如何在设计数据模型时使用NSKeyValueCoding协议?

我一直在尝试按照NSKeyValueCoding协议创建数据模型类.我不断收到以下错误:"找不到协议声明"当我尝试#import"NSKeyValueCoding.h"时,我得到文件未找到错误.

我在哪里可以找到这个协议或者如何实现它?

model key-value-coding ios

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

我可以覆盖setValue:forKey:?

我有一个对象很可能将NSNull设置为其所有属性的值,并且我正在使用与NSNull值不兼容的代码.有可能覆盖setValue:forKey:在我的对象中这样吗?

-(void)setValue:(id)value forKey:(NSString *)key {

    if ([value isEqual:[NSNull null]]) {
        [super setValue:nil forKey:key];
    } else {
        [super setValue:value forKey:key];
    }
}
Run Code Online (Sandbox Code Playgroud)

object.property = [NSNull null]在设置它时,不会调用该方法.如何将此设置为我的setter的默认行为?

objective-c key-value-coding

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

当我们的密钥中有@符号时,为什么NSDictionary会吓坏我?

RestKit当我@在键中使用带符号的JSON响应时遇到问题.经过一些调试后,问题似乎正在发生__NSCFDictionary

所以我尝试了以下简单的代码:

NSArray *keys = [NSArray arrayWithObjects:@"@key1", @"@key2", nil];
NSArray *objects = [NSArray arrayWithObjects:@"value1", @"value2", nil];
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects
                                                   forKeys:keys];
for (id key in dictionary) {
    NSLog(@"key: %@, value: %@", key, [dictionary valueForKey:key]);
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

[<__ NSDictionaryI 0x618000268ac0> valueForUndefinedKey:]:此类不是密钥key1的密钥值编码兼容.

有人可以解释为什么我收到此错误,如果有任何解决方法?

cocoa objective-c nsdictionary key-value-coding

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

如何在SKSpriteNode位置属性上使用KVO

我想使用KVO来观察SKSpriteNode位置属性的变化,但它似乎不起作用.SKNode的位置属性是否可以观察到?

key-value-coding sprite-kit

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

Swift:对于Double值,"这个类不符合关键值编码......"

我有一个场景,我在Swift中有一个简单的数据对象,包含多个属性变量.它们的混合String?Double?值类型.我正在尝试使用获取每个属性的值valueForKey.我的代码看起来像这样......

let myDataObj = ...
let stringKeyName = "myStringProperty"
let doubleKeyName = "myDoubleProperty"

guard let stringPropertyValue = myDataObj.valueForKey(stringKeyName) else {
    return
}
guard let doublePropertyValue = myDataObj.valueForKey(doubleKeyName) else {
    return
}
Run Code Online (Sandbox Code Playgroud)

第一次调用get stringPropertyValue工作正常,我能够按预期检索值.但是,第二次检索调用doublePropertyValue失败,并出现例外情况," this class is not key value coding-compliant for the key myDoubleProperty.'"

我知道属性名称是正确的,我也知道为此属性设置了一个值.为什么它valueForKey适用于String对象,而不适用于Double对象?

key-value-coding ios swift

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