objective c NSInvalidArgumentException仅在设备中 - 不在模拟器中

时间:2011-03-31 12:22:42

标签: objective-c xcode

我正在使用NSXMLParser来解析文档并在UITableView中显示内容。
我从XML中提取的每个元素都被添加到NSMutableArray中,然后使用来自cellForRowAtIndexPath方法的NSMutableArray填充UITableView的单元格。 (所以,我的界面看起来像这样:

@interface ncViewController : UIViewController <UITableViewDelegate, UITableViewDataSource, NSXMLParserDelegate>

以下是我如何将每个元素添加到NSMutableArray中:

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{

    if ([elementName isEqualToString:@"item"]){

        [item setObject:currentTitle forKey:@"title"];  // item is an NSMutableDictionary
        [item setObject:currentLink forKey:@"link"];
        [item setObject:[self flattenHTML:currentSummary] forKey:@"summary"];

        NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
        [dateFormat setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss Z"];
        NSDate *qdate = [dateFormat dateFromString:[currentDate stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]];
        [item setObject:qdate forKey:@"date"];

        [dateFormat release];
        dateFormat = nil;

        [stories addObject:[[item copy] autorelease]];


    }
}

当我在模拟器中测试应用程序时,一切正常,但当我在设备(iPhone)上测试时,应用程序因以下“未捕获的异常”而崩溃:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
 '-[__NSCFDictionary setObject:forKey:]: attempt to insert nil value (key: date)'

为什么qdate为零?在设备而不是模拟器中运行应用程序时会发生什么变化?

有什么建议吗?我希望有人有一个想法,因为它有点紧急...
提前谢谢!

1 个答案:

答案 0 :(得分:1)

如果设备的Region设置与日期字符串所在的语言不匹配,格式化程序将无法解析字符串。

如果字符串是英文的,您可以在格式化程序上设置区域设置,使其与字符串的语言匹配:

NSLocale *enUSPOSIXLocale = 
    [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease];
[dateFormat setLocale:enUSPOSIXLocale];
NSDate *qdate = [dateFormat dateFromString...