2011-08-09 47 views
0

我想解析谷歌天气API。我使用nsxml解析器从api获取日期,天气等,然后将它们存储在Core Data中。核心数据存储不必要的数据

我想要做的是从解析器中提取日期,将它们与当前日期相匹配,然后只存储我们需要存储的许多信息。

说,今天的日期是08/09/2011和解析匹配的日期。我希望仅将来自解析器的2个信息存储到Core Data中。我正在尝试仅存储这些日期,但我将所有4个信息存储到Core Data中。

如果我给08/11/2011,我应该只得到3天的信息不是4,但我无法这样做。我张贴我的示例代码。我正在使用测试用例来检查我的应用程序。

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict 

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

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateFormat:@"yyyy-MM-dd"]; 
    startDate = [formatter dateFromString:[attributeDict objectForKey:@"data"]]; 

    [formatter release]; 

} 
    else if ([@"forecast_conditions" isEqualToString:elementName]) 
    { 

    isParsingForecast = YES; 
    isParsingInformation = NO; 
    isParsingCurrent = NO; 

    newdate=[startDate addTimeInterval:60*60*24*[forecastConditions count]]; 
    NSMutableDictionary *fields = [[NSMutableDictionary alloc] init]; 
    [fields setObject:newdate forKey:@"date"]; 
    [fields setObject:city forKey:@"city"]; 
    [fields setObject:state forKey:@"state"]; 
    [fields setObject:country forKey:@"country"]; 
     [fields setObject:startDate forKey:@"startdate"]; 
     //[fields setObject: forKey:<#(id)#>] 
    [forecastConditions addObject:fields]; 
    [fields release]; 

} 


else if (isParsingForecast) { 

    NSMutableDictionary *fields = [forecastConditions lastObject]; 
    NSLog(@"dic is : %@ \n\n",fields); 

    [fields setObject:[attributeDict objectForKey:@"data"] forKey:elementName]; 

} 

}

发布我这里 整个代码http://www.iphonedevsdk.com/forum/iphone-sdk-development/87475-coredata-storing-more-values-than-what- required-store-database.html#post363100

+0

看不到任何示例代码... – GarlicFries

+0

你说的是什么意思,我只想存储2条信息?什么是信息?你可以给我们读出核心数据中的值是什么,然后编辑它们到你想要的样子? –

+0

我的信息是我从解析器得到的数据。我需要按日期检查它们并将它们插入到coredata中。 – new

回答

0

链接上的代码是未格式化的,非常难以阅读。但是,我确实发现了一个主要问题。

这个谓词总是失败:

predicate = [NSPredicate predicateWithFormat: 
    @"city == %@ and state == %@ and country == %@ and date==%@ and date==%@", city, state, country,startDate,endDate]; 

...如果的startDate和结束日期是不相等的。您无法针对两个不同的值测试相同的密钥名称,并且期望它能通过。

因为fetch只返回那些传递谓词的对象,所以总是失败的谓词总是返回零对象。

由于您明显在使用谓词来查找已包含解析数据的现有对象,因此始终失败的谓词意味着您的代码始终认为需要创建新的托管对象。这就是为什么你的对象图填充重复值的对象。