3 개의 별도 피드에서 데이터를 수집하는 iPhone 앱을 개발 중입니다. applicationDidFinishLaunching
및 applicationWillEnterForeground
에서 다음을 수행하십시오코어 데이터 저장소 원격 데이터 소스
[self emptySchedule];
[self populateSchedule];
[self emptyPlayers];
[self populatePlayers];
[self emptyNews];
[self populateNews];
빈 방법은 간단하게 핵심 데이터에서 정보를 제거하고 채우기 방법은 다양한 웹 JSON은/XML 피드를 호출하여 핵심 데이터에 다시 정보를 추가 할 수 있습니다. 이것은 매우 빠른 것으로 보인다. 그러나 앱에서 최신 정보를 유지하는 데 선호되는 방법인지 궁금해하고있었습니다.
편집 :
가 그냥 몇 가지 상황을주고, 여기 빈에 사용되는 몇 가지 방법이 있습니다/웁니다
을이이 응용 프로그램 시작 시간에 영향을 미칠 대부분 비동기이기 때문에?
- (void) emptySchedule
{
NSFetchRequest * allEvents = [[NSFetchRequest alloc] init];
[allEvents setEntity:[NSEntityDescription entityForName:@"Event" inManagedObjectContext:self.managedObjectContext]];
[allEvents setIncludesPropertyValues:NO]; //only fetch the managedObjectID
NSError * error = nil;
NSArray * events = [self.managedObjectContext executeFetchRequest:allEvents error:&error];
//error handling goes here
for (NSManagedObject * event in events) {
[self.managedObjectContext deleteObject:event];
}
NSError *saveError = nil;
[self.managedObjectContext save:&saveError];
}
-(void)populateSchedule
{
NSURL *url = [NSURL URLWithString:SCHEDULE_FEED_URL];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id schedule)
{
for (NSDictionary *campEvent in schedule)
{
Event *event = nil;
event = [NSEntityDescription insertNewObjectForEntityForName:@"Event" inManagedObjectContext:self.managedObjectContext];
event.eventName = [campEvent valueForKeyPath:@"eventName"];
event.ticketsRequired = [campEvent valueForKeyPath:@"ticketsRequired"];
event.location = [campEvent valueForKeyPath:@"location"];
event.practiceStart = [NSDate dateWithTimeIntervalSince1970:[[campEvent valueForKeyPath:@"practiceStart"] doubleValue]];
event.practiceEnd = [NSDate dateWithTimeIntervalSince1970:[[campEvent valueForKeyPath:@"practiceEnd"] doubleValue]];
}
NSError *saveError = nil;
//Save inserts
[self.managedObjectContext save:&saveError];
//Notify other objects of this
[[NSNotificationCenter defaultCenter] postNotificationName:@"populateSchedule" object:nil];
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Error" message:@"Error Retrieving Data. Please try again later." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alert show];
}];
[operation start];
}
앱 *에서 정보를 최신으로 유지하기위한 의미는 무엇입니까? 감사. –
피드는 다양한 소스에서 정보를 가져옵니다. 정보를 핵심 데이터에 저장하고 앱을 시작하거나 포 그라운드로 가져 오면 다시 데이터를 가져옵니다. –