2011-11-16 25 views
1

我最近將其中一個屬性的類型從@property (readonly) NSImage *someData更改爲@property (readonly) float *someData。數據是一大堆浮游物。在更改之前,NSImage是從該浮點數據創建的。如何將float *數組作爲屬性傳遞?

從那以後,每當我在我的代碼稱爲[self didChangeValueForKey:@"someData"],我收到以下錯誤:

[MyController 0x109161710> valueForUndefinedKey:]:
this class is not key value coding-compliant for the key someData.

所有其他屬性繼續工作就好了。現在,一個解決方案,這是下面的一段代碼:

- (id)valueForUndefinedKey:(NSString *)key { 
    if ([key isEqualToString:@"someData"]) { 
     return someData; // throws a warning because (float*) is not id 
    } else { 
     return [super valueForUndefinedKey:key]; 
    } 
} 

這適用於現在,而是拋出一個關於incompatible pointer type returning 'float *' from a function with result type 'id'警告。所以它不可能是最終的解決方案。

所以我明白這一點的方式是你不能擁有指針類型的屬性。那是對的嗎?
此外,我真的想通過一個屬性傳遞指針。有沒有辦法在一些數據結構中包裝一個指針來使其工作?

編輯: float數組的大小可以是幾個100 Mb,所以我不想複製它,如果我可以幫助它。我想複製到一個NSArray會有所幫助,但是這肯定會對性能造成影響。

+0

只要刪除'*' – beryllium

+0

@beryllium:我傳遞一個浮點數組。 – bastibe

+0

哦,在這種情況下請參閱@AnthonyBlake答案。我可以建議使用NSNumbers製作NSArray。 – beryllium

回答

4

根據@ BastiBechtold的評論如下:使用NSValue指向數組是將float數組封裝到NSObject而不復制它的最好方法。

+0

我必須讀取和寫入原始浮點數據。此外,數據可能會變得很大(幾百Mb),所以如果我可以幫忙的話,我不想複製它。因此,我很謹慎地將它包裝在NSArray中。 – bastibe

+0

@Basti請參閱有關創建自己的NSObject的編輯答案,其中包含一個指向浮點數組的指針。 –

+0

我想NSObject會工作。 '[NSValue valueWithPointer:someData]'雖然更好。 – bastibe