【问题标题】:Key value coding of Objective-C struct propertiesObjective-C结构属性的键值编码
【发布时间】:2013-04-11 20:17:19
【问题描述】:

根据 Apple 的文档Key-Value Coding Programming Guide,您可以在结构属性上调用 valueForKey: 和 setValue:forKey:,它们应该自动包装在 NSValue 对象中。我发现当我在 NSDecimal 上进行此调用时,我收到以下错误:

-[NSInvocation getArgument:atIndex:]: struct with unknown contents found while getting argument at index -1

谁能阐明这应该如何完成?或者这种情况下 KVO 是否损坏...

【问题讨论】:

  • 在您拨打电话时显示实际代码

标签: ios objective-c macos key-value-coding


【解决方案1】:

似乎键值编码不适用于包含位字段的结构。 所以对于这个测试类

typedef struct { int a; int b; } mystruct1;
typedef struct { int a:4; int b:4; } mystruct2;

@interface MyClass : NSObject
@property (nonatomic) mystruct1 s1;
@property (nonatomic) mystruct2 s2;  // struct with bit fields
@end

以下工作,并返回一个NSValue 对象:

MyClass *o = [[MyClass alloc] init];
mystruct1 s1 = { 4, 5 };
o.s1 = s1;
NSValue *v1 = [o valueForKey:@"s1"];

但是包含位字段的结构的相同代码会以完全相同的方式崩溃 您的问题中的消息:

mystruct2 s2 = { 4, 5 };
o.s2 = s2;
NSValue *v2 = [o valueForKey:@"s2"]; // --> NSInvalidArgumentException

由于NSDecimal 包含位域,这就解释了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 2011-06-10
    相关资源
    最近更新 更多