Чтобы поймать эту проблему, вам нужно будет установить точки останова во всех методах обратного вызова.
Проблема проста, код пытается получить доступ к памяти, которую он не может найти.
Нахождение этой строки кода сложнее, потому что обратные вызовы не вызываются последовательно.
- Добавить больше точек разрыва
- Добавить еще NSLog (..)
- Рассмотрим перехват исключений (см throwing an exception in objective-c/cocoa)
Форма выпуска консоли:
Attaching to program: `/Users/rjstelling/Library/Application Support/iPhone Simulator/User/Applications/C04A40BB-1D98-402E-BBEF-37E6FB860089/TwoViewApp.app/TwoViewApp', process 24032.
Re-enabling shared library breakpoint 1
2009-04-16 16:16:45.830 TwoViewApp[24032:20b] stream event 1
2009-04-16 16:16:45.831 TwoViewApp[24032:20b] on input stream
2009-04-16 16:16:45.831 TwoViewApp[24032:20b] stream event 1
2009-04-16 16:16:45.832 TwoViewApp[24032:20b] on output stream
2009-04-16 16:16:45.832 TwoViewApp[24032:20b] stream event 4
2009-04-16 16:16:45.832 TwoViewApp[24032:20b] on output stream
2009-04-16 16:16:45.833 TwoViewApp[24032:20b] stream has space open
(gdb) continue
2009-04-16 16:17:06.405 TwoViewApp[24032:20b] We made it - ok!
2009-04-16 16:17:06.406 TwoViewApp[24032:20b] stream event 2
2009-04-16 16:17:06.406 TwoViewApp[24032:20b] on input stream
2009-04-16 16:17:06.407 TwoViewApp[24032:20b] Processing: +OK CONN PinkNotes® Plus Master v5.00.26 Beta (v4 compatible)
:tPNPStr
2009-04-16 16:17:06.407 TwoViewApp[24032:20b] SendData= USER (null):tPNPStr
Current language: auto; currently objective-c
Program received signal: “EXC_BAD_ACCESS”.
(gdb)
Проблема возникает там, где после ProcessData
, который является обратным вызовом, я думаю. Попробуйте поставить точку останова вокруг линии 157 в TwoViewAppAppDelegate.m
Это не та линия, которая вызывает EXC_BAD_ACCESS
если добавить:
else
{
NSLog(@"We made it - ok!");
}
К заявлению, если() вы можете увидеть его проходит через if (![sendData isEqualToString:@"-"]){...}
Ошибка возникает, когда вы возвращаете форму вызова метода.
Ok формы вы комментарии, это может помочь:
При создании строки с помощью @"My string"
компилятор будет отображать их на он же памяти, если они имеют одинаковое содержание, то есть:
NSString *var1 = @"string1";
NSString *anotherstring = @"string1";
NSString *morestringivars = @"string1";
Все будут указывать на то же пространство памяти.
Это может помочь, но я не уверен, как это сделать? Возможно, вы можете разместить больше кода, чтобы я мог запускать его на моем компьютере.
Помните, что в начале цикла событий на iPhone создается резервный пул релизов.
Поэтому рекомендуется называть autorelease по sendData, как только вы назначаете его для ivar.
...
[sendData autorelease];
...
Я понял, когда я объявлял свойство sendData в своем заголовочном файле appDelegate , Я не использовал «сохранить», но я изменил это и до сих пор получаю ошибку. Странно то, что я использую другие свойства так же, как этот, и это единственный, который дает ошибку. – Dutchie432