2011-08-09 18 views
0

Google天気APIを解析しようとしています。私はnsxmlパーサを使って日付を取得しています。天気などはapiから取得し、コアデータに保存します。不要なデータを格納するコアデータ

私がしようとしているのは、パーサから日付を抽出し、現在の日付とマッチさせてから、保存する必要のある情報だけを保存することです。

今日、今日の日付は08/09/2011で、解析の日付が一致します。私は、パーサからの2つの情報だけをCore Dataに保存したいと考えています。私はそれらの日付だけを保存しようとしていますが、私は4つの情報をコアデータに保存するようにしています。

もし私が08/11/2011を与えたら、私は3日間の情報しか得られないはずです。しかし、私はそれをすることができません。サンプルコードを投稿しています。私はテストケースを使って自分のアプリケーションをチェックしています。 http://www.iphonedevsdk.com/forum/iphone-sdk-development/87475-coredata-storing-more-values-than-what-ここに私の全体のコードを投稿

- (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]; 

} 

}

required-store-database.html#post363100

+0

サンプルコードは表示されません... – GarlicFries

+0

2つの情報しか保存しないと言ったらどういう意味ですか?情報は正確には何ですか?コアデータに含まれる値の情報を読んで、それを見たいものに編集することができます。 –

+0

私の情報は、パーサから取得したデータです。日付でチェックし、それらをcoredataに挿入する必要があります。 – new

答えて

0

リンクのコードはフォーマットされておらず、読みにくいです。しかし、大きな問題が1つ見つかりました。

この述語は常に失敗します。

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

...たstartDateとendDateに値が同一でない場合。 2つの異なる値に対して同じキー名をテストすることはできず、それが合格すると期待することはできません。

フェッチでは述語を渡すオブジェクトのみが返されるため、常に失敗する述語は常にゼロのオブジェクトを返します。

パースされたデータがすでに含まれている既存のオブジェクトを見つけるために述語を使用しているように見えるので、常に失敗した述語は、コードが常に新しい管理対象オブジェクトを作成する必要があると考えていることを意味します。そのため、オブジェクトグラフは重複した値を持つオブジェクトでいっぱいになります。

関連する問題