2012-03-27 27 views
1

私のアプリケーションをアップルのためにアップルに提出しました.Appleが拒否され、次のクラッシュレポートが届きました。[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; 
    } 

ユーティリティメソッドを以下の通りです:

変数 realWorldは、画像に入って来るん
-(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

を?私はそれがあなたがdateDescriptionRealWorldを呼び出した結果を割り当てますが、決して保持しないクラスフィールドだと思います。しかし、これは不完全な情報に基づいて推測されたものです。

+0

申し訳ありませんが、クラスフィールドではありません。私はこの質問のコードに行を追加するのを忘れました。 –

+0

しかし、アプリケーションはiosシミュレータとiosデバイス上で実行されているので、私は何もクラッシュしていないようです。 –

0

いくつかの考え... if/elseではなくswitch/caseとdefault caseを使用してください。また、メソッドの名前を間違って指定しています。曜日のメソッドの代わりに、weekdayFormattedのように、それが何を返して返すのかを指定する必要があります。さらに、各メソッドで新しいdateFormatterをallocしているのではなく、クラスで1つのNSDateFormatterを使用し、これらの各メソッドでフォーマットを設定する必要があります。

すべてのメソッドを削除し、reportHeaderメソッド内に書式設定してクリーンアップすることをお勧めします。 allocallingがかなりありますが、autoreleaseを使用していますが、そうでなければ賢明でないメモリ管理をクリーンアップするにはあまりにも頼りにしています。

これは、あまりにも "実用的な"速い修正ではないかもしれませんが、それはよりよいメモリ管理につながる可能性のあるものです。

また、@Aadihiraには大きな質問があり、monthStringWithCodメソッドも表示する必要があります。

+0

アドバイスをいただきありがとうございます –

関連する問題