Поток 1: сигнал SIGABRT - при попытке получить NSMutableString

Вот мой код:

.h

NSMutableString *buffer, *tmpBuffer;
int status; // 0=waiting for <DMX>, 1=recording

.m

 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    buffer = [[NSMutableString alloc] init];
    tmpBuffer = [[NSMutableString alloc] init];
    status = 0;
}

- (void) receivedData:(NSString *)data {

        // status=0 means we are still looking for start tag
        if(status == 0) {
            // add new data to last examined chunk (if any)
            [tmpBuffer appendString:data];

            // try to locate the open tag inside the tmpBuffer
            NSRange range = [tmpBuffer rangeOfString:@"<DMX>" options:NSCaseInsensitiveSearch];

            // if found, store the portion after the start tag into buffer
            if(range.location != NSNotFound) {
                range.length = [tmpBuffer length] - range.location + 5; // 5 is length of start tag...
                [buffer setString:[tmpBuffer substringWithRange:range]];
                status = 1; // set status to 1 so we know recording started
            } else {
                // store last examined chunk
                [tmpBuffer setString:data];
            }
        } else {
            [buffer appendString:data];
            NSRange range = [buffer rangeOfString:@"</DMX>" options:NSCaseInsensitiveSearch];
            if(range.location != NSNotFound) {
                range.length = [buffer length] - range.location;

                [self fullDMXReceived:buffer];

                [buffer deleteCharactersInRange:range];
                status = 0;
            }
        }
    }

    - (void) fullDMXReceived:(NSString*)finalData {
        NSRunAlertPanel(@"", finalData, @"", @"", @"");
    }

Вот ошибка:

2012-12-02 14:39:00.356 Chatty Mac[1805:303] *** Assertion failure in -[NSTextFieldCell _objectValue:forString:errorDescription:], /SourceCache/AppKit/AppKit-1187.34/AppKit.subproj/NSCell.m:1532
2012-12-02 14:39:00.362 Chatty Mac[1805:303] An uncaught exception was raised
2012-12-02 14:39:00.367 Chatty Mac[1805:303] Invalid parameter not satisfying: aString != nil
2012-12-02 14:39:00.374 Chatty Mac[1805:303] (
    0   CoreFoundation                      0x00007fff93e350a6 __exceptionPreprocess + 198
    1   libobjc.A.dylib                     0x00007fff8f52e3f0 objc_exception_throw + 43
    2   CoreFoundation                      0x00007fff93e34ee8 +[NSException raise:format:arguments:] + 104
    3   Foundation                          0x00007fff933fe6a2 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 189
    4   AppKit                              0x00007fff92660205 -[NSCell _objectValue:forString:errorDescription:] + 159
    5   AppKit                              0x00007fff9266015f -[NSCell _objectValue:forString:] + 20
    6   AppKit                              0x00007fff926600db -[NSCell setStringValue:] + 39
    7   AppKit                              0x00007fff926f43fc -[NSControl setStringValue:] + 138
    8   AppKit                              0x00007fff928c2ba8 -[NSAlert buildAlertStyle:title:formattedMsg:first:second:third:oldStyle:] + 7479
    9   AppKit                              0x00007fff928c478b _NXDoLocalRunAlertPanel + 343
    10  AppKit                              0x00007fff928c461c NSRunAlertPanel + 157
    11  Chatty Mac                          0x00000001000070bd -[AppDelegate fullDMXReceived:] + 61
    12  Chatty Mac                          0x0000000100007036 -[AppDelegate receivedData:] + 582
    13  Chatty Mac                          0x000000010000e751 -[ORSSerialPortDemoController serialPort:didReceiveData:] + 401
    14  Chatty Mac                          0x000000010000a6fa -[ORSSerialPort receiveData:] + 170
    15  Chatty Mac                          0x0000000100009676 __block_global_1 + 38
    16  libdispatch.dylib                   0x00007fff9637bf01 _dispatch_call_block_and_release + 15
    17  libdispatch.dylib                   0x00007fff963780b6 _dispatch_client_callout + 8
    18  libdispatch.dylib                   0x00007fff9637d0c8 _dispatch_main_queue_callback_4CF + 275
    19  CoreFoundation                      0x00007fff93dd70fe __CFRunLoopRun + 1614
    20  CoreFoundation                      0x00007fff93dd66b2 CFRunLoopRunSpecific + 290
    21  HIToolbox                           0x00007fff949130a4 RunCurrentEventLoopInMode + 209
    22  HIToolbox                           0x00007fff94912e42 ReceiveNextEventCommon + 356
    23  HIToolbox                           0x00007fff94912cd3 BlockUntilNextEventMatchingListInMode + 62
    24  AppKit                              0x00007fff92682613 _DPSNextEvent + 685
    25  AppKit                              0x00007fff92681ed2 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 128
    26  AppKit                              0x00007fff92679283 -[NSApplication run] + 517
    27  AppKit                              0x00007fff9261dcb6 NSApplicationMain + 869
    28  Chatty Mac                          0x00000001000056d2 main + 34
    29  Chatty Mac                          0x0000000100001da4 start + 52
    30  ???                                 0x0000000000000003 0x0 + 3
)
2012-12-02 14:39:00.475 Chatty Mac[1805:303] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: aString != nil'
*** First throw call stack:
(
    0   CoreFoundation                      0x00007fff93e350a6 __exceptionPreprocess + 198
    1   libobjc.A.dylib                     0x00007fff8f52e3f0 objc_exception_throw + 43
    2   CoreFoundation                      0x00007fff93e34ee8 +[NSException raise:format:arguments:] + 104
    3   Foundation                          0x00007fff933fe6a2 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 189
    4   AppKit                              0x00007fff92660205 -[NSCell _objectValue:forString:errorDescription:] + 159
    5   AppKit                              0x00007fff9266015f -[NSCell _objectValue:forString:] + 20
    6   AppKit                              0x00007fff926600db -[NSCell setStringValue:] + 39
    7   AppKit                              0x00007fff926f43fc -[NSControl setStringValue:] + 138
    8   AppKit                              0x00007fff928c2ba8 -[NSAlert buildAlertStyle:title:formattedMsg:first:second:third:oldStyle:] + 7479
    9   AppKit                              0x00007fff928c478b _NXDoLocalRunAlertPanel + 343
    10  AppKit                              0x00007fff928c461c NSRunAlertPanel + 157
    11  Chatty Mac                          0x00000001000070bd -[AppDelegate fullDMXReceived:] + 61
    12  Chatty Mac                          0x0000000100007036 -[AppDelegate receivedData:] + 582
    13  Chatty Mac                          0x000000010000e751 -[ORSSerialPortDemoController serialPort:didReceiveData:] + 401
    14  Chatty Mac                          0x000000010000a6fa -[ORSSerialPort receiveData:] + 170
    15  Chatty Mac                          0x0000000100009676 __block_global_1 + 38
    16  libdispatch.dylib                   0x00007fff9637bf01 _dispatch_call_block_and_release + 15
    17  libdispatch.dylib                   0x00007fff963780b6 _dispatch_client_callout + 8
    18  libdispatch.dylib                   0x00007fff9637d0c8 _dispatch_main_queue_callback_4CF + 275
    19  CoreFoundation                      0x00007fff93dd70fe __CFRunLoopRun + 1614
    20  CoreFoundation                      0x00007fff93dd66b2 CFRunLoopRunSpecific + 290
    21  HIToolbox                           0x00007fff949130a4 RunCurrentEventLoopInMode + 209
    22  HIToolbox                           0x00007fff94912e42 ReceiveNextEventCommon + 356
    23  HIToolbox                           0x00007fff94912cd3 BlockUntilNextEventMatchingListInMode + 62
    24  AppKit                              0x00007fff92682613 _DPSNextEvent + 685
    25  AppKit                              0x00007fff92681ed2 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 128
    26  AppKit                              0x00007fff92679283 -[NSApplication run] + 517
    27  AppKit                              0x00007fff9261dcb6 NSApplicationMain + 869
    28  Chatty Mac                          0x00000001000056d2 main + 34
    29  Chatty Mac                          0x0000000100001da4 start + 52
    30  ???                                 0x0000000000000003 0x0 + 3
)
libc++abi.dylib: terminate called throwing an exception
(lldb) 

Это происходит где [self fullDMXReceived: buffer]; вызывается, потому что когда я его удаляю, он не падает.

Что тут происходит? Кто-нибудь может расшифровать эту ошибку?

К вашему сведению, я вызываю ReceiveData из другого класса следующим образом: AppDelegate * theAppDelegate = [[AppDelegate alloc] init]; [theAppDelegate ReceivedData: строка]; Могло ли это быть проблемой?

Когда я запускаю AppDelegate * theAppDelegate = (AppDelegate *) [[NSApplication sharedApplication] делегат];

Я получаю это сообщение об ошибке:

2012-12-03 06:00:12.791 Chatty Mac[1580:303] An uncaught exception was raised
2012-12-03 06:00:12.793 Chatty Mac[1580:303] -[__NSCFString substringWithRange:]: Range or index out of bounds
2012-12-03 06:00:12.797 Chatty Mac[1580:303] (
0   CoreFoundation                      0x00007fff8d0ee0a6 __exceptionPreprocess + 198
1   libobjc.A.dylib                     0x00007fff887e73f0 objc_exception_throw + 43
2   CoreFoundation                      0x00007fff8d0ede7c +[NSException raise:format:] + 204
3   CoreFoundation                      0x00007fff8d0c555d -[__NSCFString substringWithRange:] + 109
4   Chatty Mac                          0x0000000100006ecb -[AppDelegate receivedData:] + 283
5   Chatty Mac                          0x000000010000e772 -[ORSSerialPortDemoController serialPort:didReceiveData:] + 466
6   Chatty Mac                          0x000000010000a6ba -[ORSSerialPort receiveData:] + 170
7   Chatty Mac                          0x0000000100009636 __block_global_1 + 38
8   libdispatch.dylib                   0x00007fff8f634f01 _dispatch_call_block_and_release + 15
9   libdispatch.dylib                   0x00007fff8f6310b6 _dispatch_client_callout + 8
10  libdispatch.dylib                   0x00007fff8f6360c8 _dispatch_main_queue_callback_4CF + 275
11  CoreFoundation                      0x00007fff8d0900fe __CFRunLoopRun + 1614
12  CoreFoundation                      0x00007fff8d08f6b2 CFRunLoopRunSpecific + 290
13  HIToolbox                           0x00007fff8dbcc0a4 RunCurrentEventLoopInMode + 209
14  HIToolbox                           0x00007fff8dbcbe42 ReceiveNextEventCommon + 356
15  HIToolbox                           0x00007fff8dbcbcd3 BlockUntilNextEventMatchingListInMode + 62
16  AppKit                              0x00007fff8b93b613 _DPSNextEvent + 685
17  AppKit                              0x00007fff8b93aed2 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 128
18  AppKit                              0x00007fff8b932283 -[NSApplication run] + 517
19  AppKit                              0x00007fff8b8d6cb6 NSApplicationMain + 869
20  Chatty Mac                          0x0000000100005692 main + 34
21  Chatty Mac                          0x0000000100001d64 start + 52
22  ???                                 0x0000000000000003 0x0 + 3
)
2012-12-03 06:00:12.799 Chatty Mac[1580:303] *** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFString substringWithRange:]: Range or index out of bounds'
*** First throw call stack:
(
0   CoreFoundation                      0x00007fff8d0ee0a6 __exceptionPreprocess + 198
1   libobjc.A.dylib                     0x00007fff887e73f0 objc_exception_throw + 43
2   CoreFoundation                      0x00007fff8d0ede7c +[NSException raise:format:] + 204
3   CoreFoundation                      0x00007fff8d0c555d -[__NSCFString substringWithRange:] + 109
4   Chatty Mac                          0x0000000100006ecb -[AppDelegate receivedData:] + 283
5   Chatty Mac                          0x000000010000e772 -[ORSSerialPortDemoController serialPort:didReceiveData:] + 466
6   Chatty Mac                          0x000000010000a6ba -[ORSSerialPort receiveData:] + 170
7   Chatty Mac                          0x0000000100009636 __block_global_1 + 38
8   libdispatch.dylib                   0x00007fff8f634f01 _dispatch_call_block_and_release + 15
9   libdispatch.dylib                   0x00007fff8f6310b6 _dispatch_client_callout + 8
10  libdispatch.dylib                   0x00007fff8f6360c8 _dispatch_main_queue_callback_4CF + 275
11  CoreFoundation                      0x00007fff8d0900fe __CFRunLoopRun + 1614
12  CoreFoundation                      0x00007fff8d08f6b2 CFRunLoopRunSpecific + 290
13  HIToolbox                           0x00007fff8dbcc0a4 RunCurrentEventLoopInMode + 209
14  HIToolbox                           0x00007fff8dbcbe42 ReceiveNextEventCommon + 356
15  HIToolbox                           0x00007fff8dbcbcd3 BlockUntilNextEventMatchingListInMode + 62
16  AppKit                              0x00007fff8b93b613 _DPSNextEvent + 685
17  AppKit                              0x00007fff8b93aed2 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 128
18  AppKit                              0x00007fff8b932283 -[NSApplication run] + 517
19  AppKit                              0x00007fff8b8d6cb6 NSApplicationMain + 869
20  Chatty Mac                          0x0000000100005692 main + 34
21  Chatty Mac                          0x0000000100001d64 start + 52
22  ???                                 0x0000000000000003 0x0 + 3
)
libc++abi.dylib: terminate called throwing an exception
(lldb) 

person objectiveccoder001    schedule 02.12.2012    source источник
comment
Параметр finalData в методе fullDMXReceived: кажется равным нулю. buffer инициализируется в applicationDidFinishLaunching: методе ... возможно, receivedData: метод вызывается до applicationDidFinishLaunching:. Когда и где вызывается метод receivedData:? Ваш код не позволяет нам определить эту информацию.   -  person CedX    schedule 02.12.2012
comment
Он вызывается, когда данные поступают из последовательного порта после подключения нажатием кнопки. Это точно после applicationDidFinishLaunching.   -  person objectiveccoder001    schedule 02.12.2012
comment
мне кажется, что fullDMXReceived: вызывается только в том случае, если buffer (который становится finalData) имеет хотя бы </DMX>. Что произойдет, если вы поместите несколько строк или любых символов вместо всех тех @"" параметров, которые передаются в NSRunAlertPanel?   -  person Michael Dautermann    schedule 03.12.2012
comment
Ага. Я пытаюсь захватить NSMutableString, когда у него есть полная строка XML. (‹DMX› 255,255,255,255,255 ‹/DMX›). Поскольку мой серийный номер отправляет его сегментами, ‹DMX› 255 и, 255 255 и 255 255 ‹/ и DMX›. Очевидно, случайные куски, но я пытаюсь объединить их с помощью nsmutablestring.   -  person objectiveccoder001    schedule 03.12.2012
comment
И когда я заполняю параметры, то же самое, вылетает. Я пробовал запустить NSLog - та же сделка.   -  person objectiveccoder001    schedule 03.12.2012
comment
Можете ли вы записать значение finalData непосредственно перед тем, как оно будет передано в оповещение, чтобы узнать, причина в этом?   -  person Phillip Mills    schedule 03.12.2012
comment
К вашему сведению, я вызываю ReceiveData из другого класса следующим образом: AppDelegate * theAppDelegate = [[AppDelegate alloc] init]; [theAppDelegate ReceivedData: строка]; Могло ли это быть проблемой?   -  person objectiveccoder001    schedule 03.12.2012


Ответы (1)


В комментариях вы говорите:

AppDelegate *theAppDelegate = [[AppDelegate alloc] init];
[theAppDelegate receivedData:string];

При этом создается новый AppDelegate объект, что означает, что метод applicationDidFinishLaunching не вызывается (он уже был вызван в первом AppDelegate экземпляре). Вместо этого используйте оригинальный.

AppDelegate *theAppDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
person Phillip Mills    schedule 03.12.2012
comment
Ой! Я узнал кое-что новое! Я просто пробовал это, вылетает. Я разместил новое сообщение об ошибке в своем вопросе. - person objectiveccoder001; 03.12.2012
comment
Используйте навигатор точки останова, чтобы установить точку останова для исключений Objective-C, и он должен показать вам неправильную строку. Или же пройдите receivedData:, пока не дойдете до линии, где он умирает. (Очевидно, из-за ошибки вы обращаетесь к строке за ее концом. Когда вы обнаружите ошибку, проверьте свою строку и свои вычисления диапазона.) - person Phillip Mills; 03.12.2012
comment
Понятно. Re написал весь код полученных данных. Теперь отлично работает. Спасибо! - person objectiveccoder001; 03.12.2012