推送ViewController并弹出会导致核心数据对象丢失值

时间:2012-06-02 20:19:21

标签: core-data ios5

我正在推动View Conroller,然后当我通过段控制器弹出它以恢复原始状态。一些价值观会发生变化。一个是距离值(浮点数),另一个是缩略图,存储为二进制数据。

有没有办法告诉Core Data在推送另一个View Controller之前基本上冻结这个数组(它当前是一个数组)?也许将它复制到tmpArray然后在viewDidAppear上复制那个tmpArray(如果它存在的话)?听起来很讨厌,但我需要让它发挥作用。

THX

编辑#1

所以这里有一些代码可以解决问题。所以似乎getAllLocationsWithFinished导致self.tmpLocations改变:

  //works
  NSLog(@"#1 locations right before call: %@",[self.locations objectAtIndex:2]);
  self.tmpLocations=[[NSArray alloc] initWithArray:[self.locations copy]];
  //works
  NSLog(@"#2 locations right before call: %@",[self.tmpLocations objectAtIndex:2]);

  [[ModelManager sharedModelManager] getAllLocationsWithFinished:^(NSArray* map_locations) 
  {
    // data is off
    NSLog(@"#3 locations right before call: %@",[self.tmpLocations objectAtIndex:2]);

1 个答案:

答案 0 :(得分:0)

timpone,

如果要在视图控制器中创建这些项目,则可以通过保存它们来保证它们保持原样。也就是说,如果Core Data是你的罪魁祸首,我会非常惊讶。导航控制器是核心数据的正交技术;他们彼此独立。

您是否确定在推送的视图控制器可见时没有发生内存警告?它们经常出现,特别是涉及BLOB时,带有导航控制器。您的代码可能会对更改的值负责。

如果您使用GCD在-getAllLocationsWithFinished:执行背景任务,那么您很可能无法从后台MOC中捕获已保存的通知。必须捕获此对象并在线程之间合并对象,以使主线程的对象与后台保持同步。

安德鲁