1

我正在推动 View Conroller,然后当我通过段控制器弹出它以返回原始状态时。有几个值会改变。一个是距离值(浮点数),另一个是存储为二进制数据的缩略图。

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

谢谢

编辑#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]);
4

1 回答 1

0

定音鼓,

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

您确定在推送的视图控制器可见时没有发生内存警告吗?它们经常发生,特别是当涉及 B​​LOB 时,导航控制器。您的代码可能负责更改值。

如果您使用 GCD 在 中执行后台任务-getAllLocationsWithFinished:,那么您很可能没有从您的后台 MOC 中捕获确实保存通知。必须抓住这一点,并在线程之间合并对象,以保持主线程的对象与背景同步。

安德鲁

于 2012-06-03T14:54:53.207 回答