1

を plist に文字列として保存しNSDateています。起動時に、文字列を plist から に変換しNSDateて後で比較しようとしています。

これは、plistに値を保存する方法です:

[InfoDic setValue:[NSDate date] forKey:@"LastDate"];

ログ(を[NSDate date]適切な文字列に変換すると)には、次のように書かれています:

2013-04-13 22:47:57 +0000

これは、plistの値を次のように変換しようとしている方法ですNSDate:

NSString *Checkdate= [InfoDic objectForKey:@"LastDate"];
NSDateFormatter *DateFormat=[[NSDateFormatter alloc]init];
[DateFormat setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
NSDate *theday=[DateFormat dateFromString:Checkdate];

これは私の iPhone 4S のエラー ログです。

<Error>: -[__NSDate length]: unrecognized selector sent to instance 0x1d8715e0
<Error>: *** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '-[__NSDate length]: unrecognized selector sent to instance 0x1d8715e0'
    *** First throw call stack:
(0x31e5c2a3 0x39b7997f 0x31e5fe07 0x31e5e531 0x31db5f68 0x327c213d 0x327c208d 0x327c237b 0x23fe1 0x33c83595 0x33cc3d79 0x33cbfaed 0x33d011e9 0x2385d 0x33cc4ad9 0x33cc4663 0x33cbc84b 0x33c64c39 0x33c646cd 0x33c6411b 0x3597a5a3 0x3597a1d3 0x31e31173 0x31e31117 0x31e2ff99
0x31da2ebd 0x31da2d49 0x33cbb485 0x33cb8301 0x235a1 0x23528)

デバイスにアプリをインストールすると、最初の日付が取得され、plist に保存されることに注意してください。アプリを閉じて再実行すると、SIGABRT が表示されます。

これについてどうすればよいですか?

4

2 に答える 2

3

日付を plist に文字列として保存するのではなく、日付として保存します。

この線:

[InfoDic setValue:[NSDate date] forKey:@"LastDate"];

実際のNSDateオブジェクトを格納します。

元に戻すために必要なのは、次のように呼び出すことだけです。

NSDate *theDay = InfoDic[@"LastDate"];

ところで - 行:

[InfoDic setValue:[NSDate date] forKey:@"LastDate"];

次のようにする必要があります。

[InfoDic setObject:[NSDate date] forKey:@"LastDate"];

あるいは単に:

InfoDic[@"LastDate"] = [NSDate date];
于 2013-04-13T23:19:13.460 に答える
2

あなたは物事を過度に複雑にしています。NSDateオブジェクトを格納すると が返されると考える理由は何NSStringですか?

やるだけ

NSDate * checkDate = [InfoDic objectForKey:@"LastDate"];

KVCまた、メソッドとメソッドを混同しないでくださいNSDictionary

悪い驚きに直面したくない場合は、setObject:forKey:代わりに使用したい.setValue:forKey

于 2013-04-13T23:19:05.517 に答える