2015-05-14 7 views
0

Хорошо,Основные данные не сохраняются: Использование magicalrecord

Я использую Magicalrecord для реализации основных данных. Мое приложение загружает кучу информации при первой загрузке. Эти данные затем сохраняются в основных данных. Это делается в файле AppDelegate. Но, когда мое приложение переходит на задний план или прекращается, данные теряются. Вот didFinishLaunching методом опций:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

NSLog(@"My app is starting"); 


[MagicalRecord setupAutoMigratingCoreDataStack]; 

//NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

if (![[NSUserDefaults standardUserDefaults] objectForKey:@"AGM_DataSetup"]) { 



    NSError* jsonError; 
    NSArray* json; 

    Reachability *reachability = [Reachability reachabilityForInternetConnection]; 
    NetworkStatus internetStatus = [reachability currentReachabilityStatus]; 

    if (internetStatus == NotReachable) { 
     NSLog(@"Offline"); 
     NSString *filePath = [[NSBundle mainBundle] pathForResource:@"static" ofType:@"json"]; 
     NSString *myJSON = [[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:NULL]; 
     json = [NSJSONSerialization JSONObjectWithData:[myJSON dataUsingEncoding:NSUTF8StringEncoding] options:kNilOptions error:&jsonError]; 
    } else { 
     NSLog(@"Online"); 
     NSData* data = [NSData dataWithContentsOfURL: 
         aWaterURL]; 
     json = [NSJSONSerialization 
       JSONObjectWithData:data 
       options:kNilOptions 
       error:&jsonError]; 
    } 

    if (!jsonError) { 

     [MagicalRecord cleanUp]; 
     NSString* folderPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
     NSError *error = nil; 
     for (NSString *file in [[NSFileManager defaultManager] contentsOfDirectoryAtPath:folderPath error:&error]) 
     { 
      [[NSFileManager defaultManager] removeItemAtPath:[folderPath stringByAppendingPathComponent:file] error:&error]; 
      if(error) 
      { 
       NSLog(@"Delete error: %@", error.description); 
      } 
     } 

     [MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:@"Anglers411.sqlite"]; 

     NSLog(@"Initial Data Load"); 


     for (id jsonArea in json) { 

      // Create an area 
      Area *area = [Area MR_createEntity]; 
      area.name = [jsonArea objectForKey:@"name"]; 
      area.bulletDescription = [jsonArea objectForKey:@"bulletDescription"]; 
      area.uid = [jsonArea objectForKey:@"id"]; 

      NSArray* jsonLocations = [jsonArea objectForKey:@"locations"]; 

      for (id jsonLocation in jsonLocations) { 

       // create a location 
       Location *location = [Location MR_createEntity]; 
       location.uid = [jsonLocation objectForKey:@"id"]; 
       location.name = [jsonLocation objectForKey:@"name"]; 
       location.desc = [jsonLocation objectForKey:@"desc"]; 
       location.directions = [jsonLocation objectForKey:@"directions"]; 
       location.bulletDescription = [jsonLocation objectForKey:@"bulletDescription"]; 
       location.area = area; 

       NSArray* jsonBugs = [jsonLocation objectForKey:@"bugs"]; 

       for (id jsonBug in jsonBugs) { 
        Bug *bug = [Bug MR_createEntity]; 
        bug.name = [jsonBug objectForKey:@"name"]; 
        bug.spring = [jsonBug objectForKey:@"spring"]; 
        bug.summer = [jsonBug objectForKey:@"summer"]; 
        bug.fall = [jsonBug objectForKey:@"fall"]; 
        bug.winter = [jsonBug objectForKey:@"winter"]; 
        bug.location = location; 
       } 
      } 

     } 

     [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) { 
      if (success) { 
       NSLog(@"You successfully saved your context."); 
      } else if (error) { 
       NSLog(@"Error saving context: %@", error.description); 
      } 
     }]; 


     // Set User Default to prevent another preload of data on startup. 
     [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"AGM_DataSetup"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
    } 

} 
return YES; 
} 

Вот метод я использую в обоих applicationDidEnterBackground и ApplicationWillTerminate:

- (void)saveContext { 
[MagicalRecord cleanUp]; 

} 

Спасибо за любую помощь в этом. Я прочитал каждый магический речевой вопрос и не нашел ничего, что сработало.

Заботиться,

Бен

ответ

0

К сожалению,

После дальнейшего изучения, я вижу, что он вообще не будет работать, чтобы создать 2 ядра данных суммируется с разными именами, если вы хотите они должны быть в одном стеке ... Я исправил это.

Смежные вопросы