我正在推动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]);
答案 0 :(得分:0)
timpone,
如果要在视图控制器中创建这些项目,则可以通过保存它们来保证它们保持原样。也就是说,如果Core Data是你的罪魁祸首,我会非常惊讶。导航控制器是核心数据的正交技术;他们彼此独立。
您是否确定在推送的视图控制器可见时没有发生内存警告?它们经常出现,特别是涉及BLOB时,带有导航控制器。您的代码可能会对更改的值负责。
如果您使用GCD在-getAllLocationsWithFinished:
执行背景任务,那么您很可能无法从后台MOC中捕获已保存的通知。必须捕获此对象并在线程之间合并对象,以使主线程的对象与后台保持同步。
安德鲁