0

NSDateFormatter を使用して日付をフォーマットしようとしていますが、アプリが EXC_BAD_ACCESS でクラッシュします。

コードは次のとおりです。

DateInputTableViewCell *cell0 = (DateInputTableViewCell *)[paramTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
DateInputTableViewCell *cell1 = (DateInputTableViewCell *)[paramTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0]];

NSString *fromDate = [[Helpers defaultFormatter] stringFromDate:cell0.dateValue];
NSString *toDate = [[Helpers defaultFormatter] stringFromDate:cell1.dateValue];

上記のコードは、私が持っている 2 つのカスタム UITableViewCell から日付を取得しています。値は null ではありません (テスト済み)。しかし、ヘルパー クラスから defaultFormatter メソッドを使用しようとすると、アプリがクラッシュします。以下はコードです:

+ (NSDateFormatter *)defaultFormatter{
    defaultFormatter = [[NSDateFormatter alloc] init];
    NSLocale* locale = [[NSLocale alloc] initWithLocaleIdentifier:@"pt_BR"];
    [defaultFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"America/Sao_Paulo"]];
    [defaultFormatter setDateFormat:@"yyyy'-'MM'-'dd' 'HH':'mm':'ss"];
    [defaultFormatter setLocale:locale];
    [locale release];
    return defaultFormatter;
}

カスタム UITableViewCell の NSDateFormatter は次のように定義されます。

self.dateFormatter = [[NSDateFormatter alloc] init];
self.dateFormatter.timeStyle = NSDateFormatterNoStyle;
self.dateFormatter.dateStyle = NSDateFormatterMediumStyle;

ここで同様の質問をいくつか見ましたが、この問題を解決できませんでした!

前もって感謝します!

編集

ここに画像の説明を入力

4

2 に答える 2

1

メソッドは何も返さないため、メッセージを送信しようdefaultFormatterとするガベージ値を取得しstringFromDate:て、クラッシュを引き起こします。コンパイラはこれについて警告する必要があるため、常にコンパイラの警告を修正してください。

于 2013-01-14T19:07:57.153 に答える
0

私のコメントで述べたように、returnステートメントがdefaultFormatterメソッドにありません。defaultFormatter値を設定した後、を返す必要があります。

こんな感じで

+ (NSDateFormatter *)defaultFormatter{
    defaultFormatter = [[NSDateFormatter alloc] init];
    NSLocale* locale = [[NSLocale alloc] initWithLocaleIdentifier:@"pt_BR"];
    [defaultFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"America/Sao_Paulo"]];
    [defaultFormatter setDateFormat:@"yyyy'-'MM'-'dd' 'HH':'mm':'ss"];
    [defaultFormatter setLocale:locale];
    [locale release];
    return defaultFormatter;
}
于 2013-01-14T19:08:53.900 に答える