【发布时间】:2018-08-23 09:42:10
【问题描述】:
我正在向服务器发送详细信息,这需要我将日期字符串转换为 NSDate 对象。携带这个对象的字典是这样声明的
NSMutableDictionary *detailsRequest = [NSMutableDictionary dictionary];
那么将日期字符串转换为对象的代码如下所示
[_dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
[_dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"];
[_dateFormatter setAMSymbol:@"am"];
[_dateFormatter setPMSymbol:@"pm"];
[detailsRequest setObject:[_dateFormatter stringFromDate:[_dateFormatter dateFromString:val]] forKey:NDUserServerDateOfBirthKey];
键 NDUserServerDateOfBirthKey 被声明为这样的常量
NSString * const NDUserServerDateOfBirthKey = @"dob";
val 的值始终是 '09/08/1987',当它到达最后一行时,它会抛出一个 SIGABRT 错误,上面写着
2018-08-23 10:33:04.612769+0100 ClientCore[353:36543] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSDictionaryM setObject:forKey:]: object cannot be nil (key: dob)'
我尝试将 _dateFormatter 缩减为 [_dateFormatter setDateFormat:@"yyyy-MM-dd"];但它仍然会因同样的错误而崩溃。我的字符串日期总是有一个值,所以我做错了什么?
【问题讨论】:
-
[_dateFormatter dateFromString:val]为零。现在,问题是val是什么?与NSDictionary或NSObject或XCode完全无关,我将更改标签。这是一个基本的NSDateFormatter问题。就像你这样:"yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"应该如何匹配"09/08/1987"?它不能。dateFormat应该是dd/MM/yyyy或MM/dd/yyyy,具体取决于第一个是月份还是月份中的某一天。 -
使用 stringFromDate 方法,您不是将 NSString 转换为 NSDate,而是将 NSDate 转换为 NSString
-
此外,“日期字符串”和“NSObject”是什么意思?任何对象都继承自 NSObject,并且没有像“日期字符串”这样的对象——它是 NSDate 或 NSString——你能澄清一下你需要做什么吗?
标签: objective-c nsdateformatter