2011-12-26 15 views
0

文字列をNSDateFormatterのdateFromStringメソッドに渡そうとするとクラッシュします。dateFromStringは、私が提供する文字列では動作しません。

私はドキュメントをチェックアウトしましたが、何が問題になるか説明するために何も表示されません。

 NSError * errorX; 

    NSDictionary * attributesDict = [[fileManager attributesOfItemAtPath:imgPath error:&errorX ] retain]; 

    NSString *theDate = [[attributesDict objectForKey:@"NSFileCreationDate"] retain]; 

    [NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4]; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss ZZZ"]; 

    NSDate *dateFromString = [[NSDate alloc] init]; 
    dateFromString = [dateFormatter dateFromString:theDate]; 

クラッシュは最後の行から来ます。

erminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSDate length]: unrecognized selector sent to instance 0x1bd380' 

私がどこに行ったかを指摘できる人は誰ですか?

おかげで、 -code

答えて

3

[attributesDict objectForKey:@"NSFileCreationDate"]はNSDate、ないNSStringのを返します。その時点で、探しているNSDateが既にあるので、NSDateFormatterを使用して解析する必要はありません。実際、dateFromString:は文字列を必要とするため、もちろんできません。

ここでは、あなたの質問に関係のない、いくつかのメモリ管理の問題があります。

0

は、それがすでに文字列のNSDate代わりにあなたを返すだこのライン

NSString * theDate = [[attributesDict objectForKey:@"NSFileCreationDate"] retain]; 

ように見えます。

ウェブを介してこの情報を取得している場合、フォーマットに応じて、一部のjsonパーサーが自動的にオブジェクトをNSDateにキャストします。

2

ファイルシステムから返されるオブジェクトは、NSStringではなく、NSDateです。あなたはすでに日付オブジェクトを持っているので、日付に戻してみる必要はありません。

投稿したクラッシュデータは、クラッシュした理由を正確に示しています。あなたのアプリはlengthメッセージを日付オブジェクトのインスタンスに送信し、その日付オブジェクトはそのメッセージに応答しません(NSDateには-lengthメソッドがありません)。 dateFromString:は文字列を期待しており、文字列を解析する必要があることがわかっているので、文字列の長さを照会する必要があると想定できます。だから、あなたはすでに実際の日付オブジェクトを持っていることがわかります。

0

確かに [attributesDict objectForKey:@ "NSFileCreationDate"] はNSStringオブジェクトを返しますか? NSDateを返すようです。