Не найдено объявление свойства ‘pData’ в интерфейсе-Objective C

#objective-c

#objective-c

Вопрос:

Как объявить массив символов, чтобы все функции, определенные внутри класса, могли использовать его с обновленными значениями.

Получение ошибок при определении данных char[4096] в определении @synthesize.

 @interface A: NSObject
{
 char data[4096];
}
@property(nonatomic,retain)char data;
@end
@implementation A
@synthesize data
@end
  

Я получаю сообщение «Нет объявления свойства ‘pData’, найденного в интерфейсе»

Комментарии:

1. Переменная класса является массивом, но определение свойства является символом.

Ответ №1:

Не уверен, почему вы получаете эту ошибку, но в вашем коде явно не так несколько вещей:

  1. data переменная экземпляра и свойство для нее имеют разные типы. Объявление свойства должно быть

     @property(nonatomic) char[4096] data; 
      
  2. Вы должны использовать атрибут retain только для свойств типов obj-c, для обычных типов c используйте assign (или ничего не указывайте, поскольку по умолчанию используется assign)

  3. Подвергать ваш указатель на char прямым изменениям может быть не очень хорошей идеей — лучше сделайте ваше свойство доступным только для чтения и создайте специальный метод для изменения его содержимого:

     @property(nonatomic, readonly) char[4096] data;
    - (void) changeData:...//some parameters here
      

PS Может быть, рассмотреть возможность использования NSString* (или NSMutableString* ) вместо char[]?

P.P.S. Или, если вы просто храните какие-то случайные байтовые данные, рассмотрите возможность использования NSData / NSMutableData для этого. (Спасибо @bbum за это предложение)

Комментарии:

1. 4. Почему бы просто не использовать NSData ? Оно явно предназначено для хранения пакета произвольных байтов.

2. @bbum. Вы правы, NSString просто возникла в моем сознании из char как ассоциация.