2013-04-13 65 views
1

我將一個NSDate作爲字符串存儲在plist中,並且在啓動時我試圖將字符串從plist轉換回NSDate以稍後進行比較。將NSDate轉換爲NSString導致無法識別的選擇器異常

這是怎麼了存儲在我的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。

該怎麼辦?

回答

2

你太過複雜了。什麼讓你認爲存儲一個NSDate對象,你會得到一個NSString

只是做

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

此外,不要混淆KVC方法與NSDictionary方法。

如果您不想面對不好的意外,您希望使用setObject:forKey:而不是setValue:forKey

+0

我認爲,因爲plists鍵「LastDate」是一個字符串(因爲我在Plist編輯器中編輯它是一個字符串) – Maurice

+1

要一致。如果要存儲字符串,請使用日期格式化程序將日期轉換爲字符串,然後執行此操作。您不能指望日期自動轉換爲字符串,只是因爲您在plist編輯器中設置了該類型。 –

+3

@MauriceA。如果你想存儲一個日期並取回一個日期,不要經歷顯式地將日期轉換爲字符串/從字符串轉換的麻煩。只需使用日期。只是因爲當你看到原始plist文件時,你將日期看作一個字符串並不意味着它被存儲爲一個字符串。你看到的字符串應該包含在''元素中。 – rmaddy

3

您不會在plist中存儲日期作爲字符串,而是將其存儲爲日期。

線:

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

存儲實際NSDate對象。

所有你需要把它背出來就是調用:

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

BTW - 行:

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

應該是:

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

或者只是:

InfoDic[@"LastDate"] = [NSDate date]; 
+0

也謝謝!這是非常有幫助的,我希望當我將其他答案提供給「接受答案的問題」時,我不會冒犯你,因爲他在評論部分爲我解釋了它。 – Maurice

相關問題