2014-09-30 32 views
1

我從API資源中檢索一些數據,並且想要使用魔法記錄將結果存儲在我的城市實體內,當過程完成時,使用結果在我的ViewController中重新加載tableView。將數據保存在塊中的魔法記錄

一切都很好,但是當我第一次啓動應用程序時,會啓動dowload進程並將數據保存在覈心數據中。 enter image description here

但我的ViewControllers中的表視圖是空的。

如果我在第一時間 enter image description here

後啓動應用程序的正確的tableView刷新。

我不知道問題是否在線程中...任何人都可以幫助我嗎?

的ViewController

在這裏,我開始請求。當塊被調用時,我保存城市陣列和重載的tableView

- (void)getCitiesFromDataStore { 
    [[APIManager sharedManager] getCitiesWithCompletion:^(NSArray *cities) { 
     _dataSourceArray = cities; 

     [self.citiesTableView reloadData]; 
    } failure:^(NSError *error) { 
     NSLog(@"%@",error.localizedDescription); 
    }]; 
} 

APIMAnager

- (void)getCitiesWithCompletion:(void (^)(NSArray *))succesBlock 
         failure:(void (^)(NSError *))errorBlock 
{ 


    NSArray *cachedCities = [City findAllCities]; 

    if ([cachedCities count] == 0) { 
     [self GET:@"cities" parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) { 

      NSArray *results = responseObject[@"cities"]; 

      [City MR_importFromArray:results]; 

      [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait]; 

      NSArray *cities = [City findAllCities]; 

      succesBlock(cities); 

     } failure:^(NSURLSessionDataTask *task, NSError *error) { 
      errorBlock(error); 
     }]; 

     return; 
    } 

    // Si ya hay ciudades almacenadas en CoreData, devuelvo el 
    // succesblock con las ciudades de CoreData 
    succesBlock(cachedCities); 


} 

我有一個類別也管理與城市實體

市+ DBOperations行動

+ (NSArray *)findAllCities 
{ 
    NSArray *cities = [City MR_findAll]; 

    return cities; 
} 
+1

您是否嘗試過在指定的進口默認情況下? '[City MR_importFromArray:results inContext:[NSManagedObjectContext MR_defaultContext]]'。 – 2014-10-06 19:50:25

+0

該問題已經解決從我的Pod文件中刪除魔法記錄並將庫導入我的項目從神奇記錄github頁面 – dpbataller 2014-10-08 18:40:45

+0

@dpbataller - 我不知道你是否有足夠高的分數,但如果你想出你的想法自己的問題,你應該繼續前進,並把它作爲一個實際的答案,並將其標記爲這樣。這樣人們就知道你已經修好了。 – RyanJM 2014-11-13 23:33:41

回答

0

我知道你說過你已經解決了這個問題,但對於其他可能會來這裏的人來說,你可以嘗試的另一件事是將包裹導入到saveWithBlock:completion:中,並在完成區塊中查找。

此外,請確保您知道每個方法正在使用的上下文。明確這一點通常很有幫助。

因此你可以將其更改爲(這是未經測試,但應該給你的概念):

[self GET:@"cities" parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) { 

    NSArray *results = responseObject[@"cities"]; 

    [MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) { 
     [City MR_importFromArray:results inContext:localContext]; 
    } completion:^(BOOL contextDidSave, NSError *error) { 
     NSArray *cities = [User MR_findAllInContext:[NSManagedObjectContext MR_defaultContext]]; 
     succesBlock(cities); 
    }]; 

} failure:^(NSURLSessionDataTask *task, NSError *error) { 
    errorBlock(error); 
}]; 
相關問題