Недавно я изменил тип одного из моих свойств с @property (readonly) NSImage *someData
на @property (readonly) float *someData
. Данные представляют собой большой массив с плавающей точкой. Перед изменением NSImage
был создан из этих данных с плавающей точкой.
С тех пор всякий раз, когда я звонил [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'
. Так что это не может быть окончательным решением.
Итак, насколько я понимаю, у вас не может быть свойства типа указателя. Это правильно?
Кроме того, я действительно хочу передать этот указатель через свойство. Есть ли какой-нибудь способ обернуть указатель в какую-то структуру данных, которая бы работала?
Редактировать: Размер плавающего массива может составлять несколько 100 Мб, поэтому я не хочу копировать его, если смогу помочь. Я полагаю, что копирование в NSArray поможет, но это определенно ухудшит производительность.