Я разрабатываю приложение, которое получает свои данные из списка, расположенного на моем веб-сервере. Поэтому приложение зависит от сетевого подключения. Я хочу, чтобы пользователь мог использовать мое приложение в автономном режиме, и поэтому я сохраняю копию plist на устройстве пользователя каждый раз, когда приложение загружается с сетевым подключением. Оттуда я читаю данные из списка, расположенного на устройстве.
Хотя у меня проблемы. Я начинаю загрузку данных в didFinishLaunchingWithOptions
методе AppDelegate. Это делается так:
if(hasConnection) { // returns TRUE or FALSE based on Apple's example on checking network reachability
NSLog(@"Starting download of data.");
// loading using NSURLConnection
NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:FETCH_URL] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
// create the connection with the request
// and start loading the data
NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) {
// Create the NSMutableData to hold the received data.
// receivedData is an instance variable declared elsewhere.
receivedData = [[NSMutableData data] retain];
}
}
Затем я добавляю данные в мой список Bands.plist
в connectionDidFinishLoading
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
// throw data into a property list (plist)
NSMutableArray *tmpArray = [NSPropertyListSerialization propertyListFromData:receivedData mutabilityOption:NSPropertyListMutableContainers format:nil errorDescription:nil];
NSMutableArray *plistArray = [[NSMutableArray alloc] initWithArray:tmpArray];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"Bands.plist"];
[plistArray writeToFile:path atomically:YES];
[plistArray release];
// release the connection, and the data object
[connection release];
[receivedData release];
}
Но при первой загрузке приложения происходит сбой. Я считаю, что это связано с тем, что приложение пытается получить эти данные, даже если они еще не сохранены. Если я удалю часть, которая пытается получить данные, сохраненные локально, у меня нет проблем. У меня также нет проблем, если я добавлю его снова и перезапущу приложение (вторая загрузка).
У кого-нибудь есть идеи, как решить эту проблему?
Как будто мое приложение пытается загрузить и обработать данные, которые еще не существуют.