Что вызывает SIGBUS?

Мы получаем SIGBUS (BUS_ADRALN), и он указывает на этот поток. Что вызывает эту ошибку? Строка 68: NSString *dateString = [dateFormat stringFromDate:currentTimestamp]; или [выпуск dateFormat];

NSDate *currentTimestamp = self.timestamp;

if (!currentTimestamp)
    return nil; // sanity check 

[currentTimestamp retain];

NSDateComponents *otherDay = [[NSCalendar currentCalendar] components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:currentTimestamp];
NSDateComponents *today = [[NSCalendar currentCalendar] components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:[NSDate date]];
NSDateComponents *yesterday = [[NSCalendar currentCalendar] components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:[[NSDate date] addTimeInterval: -24 * 60 * 60]];

if ([today day] == [otherDay day] &&
    [today month] == [otherDay month] &&
    [today year] == [otherDay year]) {

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"h:mm a"];
    NSString *dateString = [dateFormat stringFromDate:currentTimestamp];
    [dateFormat release];
    [currentTimestamp release];
    return [NSString stringWithFormat:@"Today %@", dateString];
}
else if ([yesterday day] == [otherDay day] &&
         [yesterday month] == [otherDay month] &&
         [yesterday year] == [otherDay year]) {

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"h:mm a"];
    NSString *dateString = [dateFormat stringFromDate:currentTimestamp];
    [dateFormat release];
    [currentTimestamp release];
    return [NSString stringWithFormat:@"Yesterday %@", dateString];
}

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MM/dd/yyyy h:mm a"];

// below is line 68
NSString *dateString = [dateFormat stringFromDate:currentTimestamp];
[dateFormat release];
[currentTimestamp release];

return dateString;

0   CoreFoundation                      0x33474894 CFDateFormatterCreateStringWithAbsoluteTime + 60
1   CoreFoundation                      0x33474817 CFDateFormatterCreateStringWithDate + 31
2   Foundation                          0x326c4ad7 -[NSDateFormatter stringForObjectValue:] + 91
3   Foundation                          0x326c4a75 -[NSDateFormatter stringFromDate:] + 21
4   MyApp                              0x000a81dc -[Message getFormattedTimestamp] (Message.m:68)
5   MyApp                              0x0007b7a4 -[ConversationView newBubble:withFrame:] (ConversationView.m:452)
6   MyApp                              0x0007b2fc -[ConversationView tableView:heightForRowAtIndexPath:] (ConversationView.m:520)
7   UIKit                               0x31bb3b09 -[UISectionRowData refreshWithSection:tableView:tableViewRowData:] + 2173
8   UIKit                               0x31bb3225 -[UITableViewRowData numberOfRows] + 73
9   UIKit                               0x31bb2c73 -[UITableView noteNumberOfRowsChanged] + 83
10  UIKit                               0x31bb27f7 -[UITableView reloadData] + 583
11  MyApp                              0x0007cccc -[ConversationView reloadAndMoveToEnd:] (ConversationView.m:147)
12  MyApp                              0x0007cc6c -[ConversationView managedObjectContext:fetchCompletedForRequest:withResults:error:] (ConversationView.m:153)
13  MyApp                              0x00197670 -[IZManagedObjectContext backgroundFetchOperation:completedWithIDs:error:] (IZManagedObjectContext.m:150)
14  MyApp                              0x001970b0 -[IZBackgroundFetchOperation fetchRequestDidCompleteWithUserInfo:] (IZBackgroundFetchOperation.m:108)
15  CoreFoundation                      0x3347df03 -[NSObject(NSObject) performSelector:withObject:] + 23
16  Foundation                          0x327237a9 __NSThreadPerformPerform + 269
17  CoreFoundation                      0x334e7a79 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 13
18  CoreFoundation                      0x334e975f __CFRunLoopDoSources0 + 383
19  CoreFoundation                      0x334ea4eb __CFRunLoopRun + 231
20  CoreFoundation                      0x3347aec3 CFRunLoopRunSpecific + 231
21  CoreFoundation                      0x3347adcb CFRunLoopRunInMode + 59
22  GraphicsServices                    0x311a541f GSEventRunModal + 115
23  GraphicsServices                    0x311a54cb GSEventRun + 63
24  UIKit                               0x31b90d69 -[UIApplication _run] + 405
25  UIKit                               0x31b8e807 UIApplicationMain + 671
26  MyApp                              0x0009b578 main (main.m:5)

person tjg184    schedule 12.10.2011    source источник
comment
Сбой потока находится ниже фактического кода. Хотите увидеть все темы? Спасибо!   -  person tjg184    schedule 13.10.2011
comment
Других сообщений о сбое нет? Какое из трех вхождений `NSString *dateString = [dateFormat stringFromDate:currentTimestamp];` является строкой 68?   -  person zaph    schedule 13.10.2011
comment
Я не вижу никаких проблем с вашим кодом, которые могли бы вызвать сбой.   -  person zaph    schedule 13.10.2011
comment
В чем идея с назначением self.timestamp для currentStamp, сохранением и выпуском вместо простого использования self.timestamp? А как насчет выполнения [[[NSDateFormatter alloc] init] autorelease] только один раз?   -  person ott--    schedule 13.10.2011
comment
Текущая отметка времени является фиктивной. Я думаю, что я отчаянно пытался что-то попробовать. Я просто не понимаю, как это может когда-либо создать эту проблему. Строка 68 была идентифицирована выше. Это в основном последняя строка.   -  person tjg184    schedule 13.10.2011


Ответы (1)


Что ж, приведенный выше код в порядке, так как мы написали для него модульный тест. Оказалось проблема с памятью. Странно то, что он всегда указывал на эту строку.

person tjg184    schedule 31.10.2011
comment
Не могли бы вы добавить больше деталей, пожалуйста? - person scorpiodawg; 16.10.2012
comment
Код выше в порядке. На самом деле это была проблема с памятью в совершенно другой части кода, которая вызывала проблему. Если вы видите что-то подобное, я бы рекомендовал использовать инструменты для определения проблемы с памятью. Мягко говоря, было больно определить корень проблемы. Надеюсь это поможет. - person tjg184; 17.10.2012
comment
Я сталкиваюсь с той же ошибкой сбоя: BUS_ADRALN (SIGBUS). Не могли бы вы помочь, как вы узнаете по инструментам. - person Mrunal; 22.05.2014