2012-03-27 347 views
1

我將我的應用程序提交給蘋果進行審查。蘋果拒絕並給了我下面的崩潰報告。[NSString stringWithFormat]的崩潰問題:

Thread 0 Crashed: 
1 Foundation      0x3595dd04 _NSDescriptionWithLocaleFunc + 44 
2 CoreFoundation     0x36ae696e __CFStringAppendFormatCore + 7998 
3 CoreFoundation     0x36a611d8 _CFStringCreateWithFormatAndArgumentsAux + 68 
4 Foundation      0x3595dc2e +[NSString stringWithFormat:] + 54 
5 WIPTime       0x0001572e -[NSDate(TKCategory) reportHeader] + 66 
6 WIPTime       0x0006bd9e -[ReportDelegate tableView:cellForRowAtIndexPath:] + 474 
7 UIKit       0x36de009c -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 540 
8 UIKit       0x36ddf17a -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] + 1070 
9 UIKit       0x36dde904 -[UITableView layoutSubviews] + 200 
10 UIKit       0x36d830d8 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 176 
11 CoreFoundation     0x36a651f4 -[NSObject performSelector:withObject:] + 36 
12 QuartzCore      0x36241a9e -[CALayer layoutSublayers] + 210 
13 QuartzCore      0x362416b6 CA::Layer::layout_if_needed(CA::Transaction*) + 210 
14 QuartzCore      0x3624583c CA::Context::commit_transaction(CA::Transaction*) + 220 
15 QuartzCore      0x36245578 CA::Transaction::commit() + 308 
16 QuartzCore      0x3623d4b2 CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 50 
17 CoreFoundation     0x36adab14 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 12 
18 CoreFoundation     0x36ad8d50 __CFRunLoopDoObservers + 252 
19 CoreFoundation     0x36ad90aa __CFRunLoopRun + 754 
20 CoreFoundation     0x36a5c49e CFRunLoopRunSpecific + 294 
21 CoreFoundation     0x36a5c366 CFRunLoopRunInMode + 98 
22 GraphicsServices    0x30b3e432 GSEventRunModal + 130 
23 UIKit       0x36dade76 UIApplicationMain + 1074 
24 WIPTime       0x00003032 main + 42 
25 WIPTime       0x00002ffc start + 32 

爲reportHeader的實施以下內容:在該方法中使用

-(NSString *) reportHeader 
    { 
    NSString *realWorld=[self dateDescriptionRealWorld]; 
    NSString *year=[self yearString]; 
    NSString *weekDay=[self weekdayString]; 
    NSString *returnString=[NSString stringWithFormat:@"%@ %@ %@",weekDay,realWorld,year]; 

    return returnString; 
    } 

實用方法是如下:

-(NSString *) dateDescriptionRealWorld 
{ 

    return [NSString stringWithFormat:@"%@ %@",[self dayString],[self monthStringWithCod]]; 
} 

- (NSString*) monthString{ 
    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
    [dateFormatter setDateFormat:@"MMMM"]; 
    return [dateFormatter stringFromDate:self]; 
} 

- (NSString*) yearString{ 
    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
    [dateFormatter setDateFormat:@"yyyy"]; 
    return [dateFormatter stringFromDate:self]; 
} 

- (NSString*) dayString{ 
    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
    [dateFormatter setDateFormat:@"dd"]; 
    return [dateFormatter stringFromDate:self]; 
} 

- (int) weekday{ 

    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateComponents *comps = [gregorian components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit | NSWeekdayCalendarUnit) fromDate:self]; 
    int weekday = [comps weekday]; 
    [gregorian release]; 
    return weekday; 
} 

-(NSString *) weekdayString 
{ 
    NSDate *date=self; 
    int weekday=[date weekday]; 
    if (weekday ==0) { 
     return @"Sat"; 
    } 
    else if(weekday ==1) 
    { 
     return @"Sun"; 
    } 
    else if(weekday ==2) 
    { 
     return @"Mon"; 

    } 
    else if(weekday ==3) 
    { 
     return @"Tue"; 

    } 
    else if(weekday ==4) 
    { 
     return @"Wed"; 

    } 
    else if(weekday ==5) 
    { 
     return @"Thu"; 

    } 
    else if(weekday ==5) 
    { 
     return @"Fri"; 

    } 

} 
+3

這是一個崩潰,而不是泄漏。 – 2012-03-27 11:37:29

+0

'monthStringWithCod'存在,對不對? – Ilanchezhian 2012-03-27 12:22:44

+0

是的,它調用了另一種代碼方法。我會立即發佈代碼 – 2012-03-27 13:27:20

回答

0

哪裏變realWorld進入了嗎?我懷疑這是一個班級領域,你分配調用dateDescriptionRealWorld的結果,但從來沒有保留。但這只是一個猜測,基於不完整的信息。

+0

對於這個錯誤感到抱歉。它不是一個類字段。我只是忘了將此行添加到此問題的代碼中。 – 2012-03-27 11:53:17

+0

但是該應用程序運行在ios模擬器上,並且ios設備也無法找到任何崩潰。 – 2012-03-27 12:03:45

0

一些想法...你應該使用開關/大小寫,而不是if/else的默認情況。另外,你錯誤地命名你的方法。不要使用星期幾方法,你應該在它做了什麼並返回後將其命名,例如weekdayFormatted。另外,你可能不應該在每個方法中分配一個新的dateFormatter,而是在你的類中使用一個NSDateFormatter,並在每個方法中設置它的格式。

我建議刪除所有的方法,並將格式放入reportHeader方法中,以清理它。你正在分配相當多的東西,儘管你使用autorelease,但你依靠它太多的清理,否則可能是不明智的內存管理。

這對你來說可能不是太「實用」的快速修復,但這些都是我看到的可能導致更好的內存管理的事情。

另外 - @Aadihira有一個很好的問題,你也應該顯示monthStringWithCod方法。

+0

感謝您的建議 – 2012-03-27 13:29:24