2012-03-27 3 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 *) 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

이것은 충돌이 아니며 누출이 아닙니다. –

+0

'monthStringWithCod'가 있습니다. 맞습니까? – Ilanchezhian

+0

예 코드의 다른 메소드를 호출합니다. 코드를 즉시 게시합니다 –

답변

0

어디 변수는 그림에 와서 realWorld 않습니다 다음되는 방법 내에서 사용되는

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

    return returnString; 
    } 

유틸리티 방법을? 나는 당신이 dateDescriptionRealWorld을 호출 한 결과를 할당하지만 결코 유지하지 않는 클래스 필드라고 생각한다. 그것은 불완전한 정보를 바탕으로 한 추측 일뿐입니다.

+0

실수로 죄송합니다. 클래스 필드가 아닙니다.이 질문의 코드에 행을 추가하는 것을 잊어 버렸습니다. –

+0

하지만 응용 프로그램이 ios 시뮬레이터와 ios 장치에서 실행 중입니다. 충돌이없는 것 같습니다. –

0

몇 가지 생각 ... if/else 대신 switch/case 및 default case를 사용해야합니다. 또한 메서드의 이름이 잘못 지정되었습니다. 평일 메서드 대신 weekdayFormatted와 같이 반환하고 이름을 지정해야합니다. 또한 모든 메소드에 새로운 dateFormatter를 할당하지 않고 클래스에서 하나의 NSDateFormatter를 사용하고 각 메소드에서 형식을 설정해야합니다.

모든 메서드를 제거하고 reportHeader 메서드 내에 서식을 지정하여 정리하는 것이 좋습니다. 당신은 꽤 많이 alloc'ing하고 autorelease를 사용하고 있지만, 당신은 그렇지 않으면 어리석은 메모리 관리를 정리하기에는 너무 많이 의존하고 있습니다.

너무 실용적이지는 않지만 더 나은 메모리 관리로 이어질 수있는 것들입니다.

또한 @Aadihira에는 큰 질문이 있으며 monthStringWithCod 메서드도 함께 보여야합니다.

+0

조언 해 주셔서 감사합니다. –

관련 문제