Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何将浮点*数组作为属性传递?_Objective C_Cocoa_Pointers_Properties_Key Value Coding - Fatal编程技术网

Objective c 如何将浮点*数组作为属性传递?

Objective c 如何将浮点*数组作为属性传递?,objective-c,cocoa,pointers,properties,key-value-coding,Objective C,Cocoa,Pointers,Properties,Key Value Coding,我最近将一个属性的类型从@property(readonly)NSImage*someData更改为@property(readonly)float*someData。数据是一个大的浮点数组。在更改之前,NSImage是从该浮点数据创建的 此后,每当我在代码中调用[self-didChangeValueForKey:@“someData”]时,我都会收到以下错误: [MyController 0x109161710>未定义键的值:: 此类不符合密钥someData的键值编码。 所有其他财产继续运

我最近将一个属性的类型从
@property(readonly)NSImage*someData
更改为
@property(readonly)float*someData
。数据是一个大的浮点数组。在更改之前,
NSImage
是从该浮点数据创建的

此后,每当我在代码中调用
[self-didChangeValueForKey:@“someData”]
时,我都会收到以下错误:

[MyController 0x109161710>未定义键的值::

此类不符合密钥someData的键值编码。

所有其他财产继续运作良好。现在,一个解决方案是以下代码:

- (id)valueForUndefinedKey:(NSString *)key {
    if ([key isEqualToString:@"someData"]) {
        return someData; // throws a warning because (float*) is not id
    } else {
        return [super valueForUndefinedKey:key];
    }
}
这暂时可以使用,但会引发一个警告,提示从结果类型为“id”的函数返回“float*”的
不兼容指针类型。
。因此,这不可能是最终的解决办法

我的理解是,不能有指针类型的属性。对吗?
另外,我真的希望通过属性传递该指针。是否有某种方法可以将指针封装在某种数据结构中,从而使其工作


编辑:浮点数组的大小可能只有几百Mb,因此如果我能帮上忙,我不想复制它。我认为将其复制到NSArray中会有所帮助,但这肯定会对性能造成不利影响。

正如@bastibechteld下面的评论:使用NSValue指向数组是将浮点数组封装在NSObject中而不复制它的最佳方法

根据@bastibechteld下面的评论:使用NSValue指向数组是将浮点数组封装在NSObject中而不复制它的最佳方法

您可以拥有类型为
float*
的属性。你甚至可以合成它的访问者


您不能在其上使用。

您可以拥有类型为
float*
的属性。你甚至可以合成它的访问者


你不能在上面使用。

@铍:我正在通过一组浮标。哦,在这种情况下,请看@AnthonyBlake答案。我可以建议用NSN编号来做一个排列。@铍:我相应地更新了问题。我相信NSArray(以及相关的NSNumber)会复制我的源数据。不过,源数据必须是一个浮点数组,我不想复制这些数据,因为它可能很大。@铍:我正在传递一个浮点数组。哦,在这种情况下,请参阅@AnthonyBlake answer。我可以建议用NSN编号来做一个排列。@铍:我相应地更新了问题。我相信NSArray(以及相关的NSNumber)会复制我的源数据。不过,源数据必须是一个浮点数组,我不想复制这些数据,因为它可能很大。我必须读取和写入原始浮点数据。此外,数据可能会变得相当大(只有几百Mb),因此如果我能帮助的话,我不想复制它。正因为如此,我对将其包装在NSArray中持谨慎态度。@我看到了编辑过的关于创建自己的NSObject的答案,其中包含指向浮点数组的指针。我认为NSObject可以工作<代码>[NSValue valueWithPointer:someData]工作得更好。啊,是的——NSValue显然是正确的方法。我是Objective-C新手——很高兴了解NSValue,谢谢=)我必须读写原始浮点数据。此外,数据可能会变得相当大(只有几百Mb),因此如果我能帮助的话,我不想复制它。正因为如此,我对将其包装在NSArray中持谨慎态度。@我看到了编辑过的关于创建自己的NSObject的答案,其中包含指向浮点数组的指针。我认为NSObject可以工作<代码>[NSValue valueWithPointer:someData]工作得更好。啊,是的——NSValue显然是正确的方法。我是Objective-C新手——很高兴了解NSValue,谢谢=)