NSString を NSDate に変換する際に問題が発生しています。
これが私のコードです:
NSLog(@"Unformatted date: %@", [d objectForKey:@"pubDate"]);
// Set the publication date as an NSDate
static NSDateFormatter *dateFormatter = nil;
if (!dateFormatter) {
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEE, dd MMM yyyy"];
}
[self setPublicationDate:[dateFormatter dateFromString:[d objectForKey:@"pubDate"]]];
NSLog(@"Date object: %@", [self publicationDate]);
NSLog(@"Date object description: %@", [[self publicationDate] description]);
これが実行されると、次のメッセージがログに記録されます (これは数回実行されます。ログ メッセージは 2 セットだけ含まれています)。
2012-08-14 12:47:28.446 (App name removed)[9009:707] Unformatted date: Mon, 02 Apr 2012
2012-08-14 12:47:28.454 (App name removed)[9009:707] Date object: (null)
2012-08-14 12:47:28.460 (App name removed)[9009:707] Date object description: (null)
2012-08-14 12:47:28.467 (App name removed)[9009:707] Unformatted date: Sun, 25 Mar 2012
2012-08-14 12:47:28.474 (App name removed)[9009:707] Date object: (null)
2012-08-14 12:47:28.480 (App name removed)[9009:707] Date object description: (null)
iOS 5.1.1 を実行している iPad touch でこのコードをテストしています。
受信する日付の形式を変更でき"D, d M Y"
ます。現在、形式文字列として使用されている PHP 日付関数から送信されています。
誰かが私が間違っているところを見てもらえますか? ご協力ありがとうございました。
更新 1: 切り替えて、デバイスではなくシミュレーターで実行しましたが、何らかの理由で機能しました。デバイスで動作しない理由について何か提案はありますか? シミュレーターは iOS 5.1 を実行しており、デバイスは iOS 5.1.1 を実行しています。
更新 2: 一部の人々は、より多くの情報を要求してきましたが、publicationDate
これは合成されたプロパティです。
.h ファイル内:
@property (nonatomic, strong) NSDate *publicationDate;
.m ファイル内:
@synthesize publicationDate;
コードをさらに分割しました。
NSLog(@"Unformatted date: %@", [d objectForKey:@"pubDate"]);
NSLog(@"Unformatted date class type: %@", [[d objectForKey:@"pubDate"] class]);
// Set the publication date as an NSDate
static NSDateFormatter *dateFormatter = nil;
if (!dateFormatter) {
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEE, dd MMM yyyy"];
}
NSString *dateString = [d objectForKey:@"pubDate"];
NSLog(@"dateString: %@", dateString);
NSDate *formattedDate = [dateFormatter dateFromString:dateString];
NSLog(@"formattedDate %@", formattedDate);
[self setPublicationDate:formattedDate];
NSLog(@"Date object: %@", [self publicationDate]);
NSLog(@"Date object description: %@", [[self publicationDate] description]);
そしてそれは今ログに記録します:
2012-08-14 13:45:35.335 (app name removed)[9167:707] Unformatted date: Sun, 25 Mar 2012
2012-08-14 13:45:35.342 (app name removed)[9167:707] Unformatted date class type: __NSCFString
2012-08-14 13:45:35.347 (app name removed)[9167:707] dateString: Sun, 25 Mar 2012
2012-08-14 13:45:35.353 (app name removed)[9167:707] formattedDate (null)
2012-08-14 13:45:35.359 (app name removed)[9167:707] Date object: (null)
2012-08-14 13:45:35.365 (app name removed)[9167:707] Date object description: (null)
更新 3: 成功! 日付フォーマッタを次のように変更することにより:
// Set the publication date as an NSDate
static NSDateFormatter *dateFormatter = nil;
if (!dateFormatter) {
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
[dateFormatter setDateFormat:@"EEE, dd MMM yyyy"];
}
それは今動作します。テスト対象のデバイスがオランダの設定に設定されていることは言及していませんでした (これはオランダの開発会社であるため)。申し訳ありませんが、これがここのコードの動作に影響を与える可能性があるとは思いもしませんでした。