Подстрочный индекс требует размера интерфейса «NSArray», который не является постоянным в нестабильном ABI - PullRequest
3 голосов
/ 03 июня 2011

Я пытаюсь отправить информацию на сервер с помощью ASIHTTPRequest, и я устанавливаю значения сообщений следующим образом:

    for(int i = 0;i<13;i++){
  [request setPostValue:propertyValues[i] forKey:propertyKeys[i]]    
}

propertyValues ​​и propertyKeys являются объектами NSArray, каждый из которых содержит 13 элементов. Когда я запускаю это, я получаю ошибку «Подстрочный индекс требует размера интерфейса« NSArray », который не является постоянным в нестабильном ABI»

Что это значит?

Ответы [ 4 ]

20 голосов
/ 03 июня 2011

Это означает, что вы пытаетесь получить доступ к NSArray*, как если бы это был массив или указатель, с которым вы могли бы выполнять арифметику.x[5] для типов указателей эквивалентно x + sizeof(x) * 5.Обратите внимание на оператор sizeof - это означает, что компилятору нужно знать размер типа, чтобы продвинуть указатель на 5 «элементов».Однако NSArray является интерфейсом Objective C, и компилятор не может быть уверен, каков размер типа.Это объясняет формулировку ошибки, которую вы получаете.

Проще говоря, вы не можете получить доступ к NSArray подобным объектам.Вам необходимо отправить им сообщение с запросом на предмет по указанному индексу, таким образом:

[propertyValues objectAtIndex:i];
3 голосов
/ 03 июня 2011

Вы не можете получить доступ к объектам внутри NSArray с синтаксисом в квадратных скобках.Вы должны использовать

[propertyValues objectAtIndex:i]

.

2 голосов
/ 03 июня 2011

Для доступа к элементам NSArray необходимо использовать objectAtIndex: метод

for(int i = 0;i<13;i++){
  [request setPostValue:[propertyValues objectAtIndex:i] forKey:[propertyKeys objectAtIndex:i]l    
}
1 голос
/ 03 июня 2011

Теперь нет доступа к значениям в NSArray (что принципиально отличается от массива C).

[request setPostValue:[propertyValues objectAtInstance:i] forKey:[propertyKeys objectAtInstance:i]];
...