2012-07-05 2 views
0

У меня есть приложение для iPhone, в котором я загружаю информацию из Интернета и помещаю ее в NSString. Он отлично работает, пока я не загружать большие файлы и поместить его в эту одну строку, то я получаю ошибкуXcode 4.3.3 - [__ NSArrayM length]: непризнанный селектор отправлен в экземпляр 0x6b6dc60

- [__ длина NSArrayM]: непризнанные селектор направлен например 0x6b6dc60

В какой-то момент я была ошибка EXC_BAD_ACCESS, но теперь это не отображается. Я предполагаю, что это проблема памяти, но я не знаю, как ее исправить. Есть ли предел того, насколько велика строковая переменная? Какие-либо предложения? Я должен также упомянуть, что ошибка иногда не появляется, но большую часть времени она делает. Заранее спасибо.

+0

Что такое обратная трассировка при возникновении этой ошибки? Вставьте его в свой ответ. – ThomasW

ответ

0

Попробуйте включить zombies, чтобы получить лучшее сообщение об ошибке. Вероятно, что-то освобождается, прежде чем вы ожидаете. Вы также можете попробовать запустить приложение в инструменте «Выделения» или «Утечки», чтобы узнать, почему ваши объекты выпущены до вашего ожидания.

+0

Привет, если использовать ARC, позволит зомби по-прежнему быть полезным ?, havent попробовал это при разработке на моем xcode. – Bazinga

+0

Это все еще может быть полезно, да, хотя и менее вероятно. Вы также можете опубликовать код, вызывающий ошибку, которую вы цитируете. –

+0

после использования зомби я обнаружил, что я, по-видимому, выпустил строковый объект при вызове «response3 = [response3 stringByAppendingString: myData2];» Имеет ли это смысл? что я могу сделать по этому поводу? – vaskal08

2

Ну, это выглядит, как вы пытаетесь получить длину массива путем вызова метода, называемого length на массив, но, чтобы получить длину массива используется метод count, как это, например:

NSInteger numberOfElements = [someArray count]; 

Надеюсь, это поможет!

P.S. Метод length существует, но он используется для объектов NSString для получения количества символов в строке.

---- UPDATE -----

От Ray Wenderlich в "My App Crashed, Now What?" учебник:

Сообщение об ошибке «непризнанный селектор отправляется например XXX» означает, что приложение пытается вызовите метод, который не существует.

Итак, где-то в вашем коде вы вызываете метод length на объект типа NSArray.

Вы на самом деле вызываете метод length на объект типа NSMutableArray, и вы знаете это из-за ошибки, поскольку __NSArrayM представляет объект NSMutableArray; регулярный объект NSArray будет представлен как __NSArrayI (суффикс «M» означает «изменяемый», в то время как суффикс «I» означает «неизменный»).

Я даже нашел очень похожий вопрос, который имеет очень похожий ответ на мой:

NSArrayM length : unrecognized selector sent to instance

  • Хех, у меня было это раньше. Где-то вы делаете это: [длина массива]; но массивы используют «count», а не «length».
+0

i havnt назвал метод «длиной» на любых массивах, предположив, что, поскольку вы указали, что длина используется для получения количества символов в строке, этот метод используется xcode для подсчета символов моего NSString. опять же, существует ли предел тому, сколько персонажей может быть, что может вызвать проблему? – vaskal08

+0

Максимальное количество символов в NSString (в iOS 5) равно (2^31) -1, что составляет около 2 ГБ. –

+0

Im 100% уверен, что я не называл метод «длиной» на любых массивах. единственный раз, когда я вызываю длину метода, - это NSString. – vaskal08

1

Это происходит потому, что вы пытаетесь бросить NSMutableArray к NSString, вы можете удалить эту ошибку, просто используя objectAtIndex:0.

, когда мы используем objectAtIndex:0, он возвращает объект, и в вашем случае этот объект является вашим NSString &, следовательно, удаляет ошибку. , например.

self.quizTextView.text=[questionTexts objectAtIndex:0];