Ios 在循环中编辑核心数据模型对象
我正在尝试编辑核心数据存储中的现有对象。当我在没有循环的情况下编辑每个对象的属性时,效果很好,但当我尝试在Ios 在循环中编辑核心数据模型对象,ios,objective-c,xcode,core-data,Ios,Objective C,Xcode,Core Data,我正在尝试编辑核心数据存储中的现有对象。当我在没有循环的情况下编辑每个对象的属性时,效果很好,但当我尝试在for循环中编辑时,只有我的最后一个对象获得新属性。 下面是我用来编辑没有循环的对象的代码。此代码工作正常): 下面是我用来在循环中编辑song属性的代码(下面的代码以某种方式只编辑最后一个对象的路径(在我的例子中是song3),其他对象的路径属性变为NULL。我不明白为什么): 我已经尝试将每个的更改为(int I=0;I的。首先,我假设您在NSManagedObjectContext方法
for
循环中编辑时,只有我的最后一个对象获得新属性。
下面是我用来编辑没有循环的对象的代码。此代码工作正常):
下面是我用来在循环中编辑song属性的代码(下面的代码以某种方式只编辑最后一个对象的路径(在我的例子中是song3),其他对象的路径
属性变为NULL
。我不明白为什么):
我已经尝试将每个的
更改为(int I=0;I的。首先,我假设您在NSManagedObjectContext方法中运行该循环。其次,您需要在编辑对象后返回NSManagedObjects上下文
目标-C:
NSError *error = nil;
if ([[self managedObjectContext] save:&error] == NO) {
NSAssert(NO, @"Error saving context: %@\n%@", [error localizedDescription], [error userInfo]);
}
do {
try managedObjectContext.save()
} catch {
fatalError("Failure to save context: \(error)")
}
Swift:
NSError *error = nil;
if ([[self managedObjectContext] save:&error] == NO) {
NSAssert(NO, @"Error saving context: %@\n%@", [error localizedDescription], [error userInfo]);
}
do {
try managedObjectContext.save()
} catch {
fatalError("Failure to save context: \(error)")
}
通过以下方式解决问题:
我从文件名中删除了所有连字符。代码在同一个循环中运行良好。我还将文件从mp3转换为wav。但我认为问题存在,因为文件名中不能包含连字符
感谢所有回答的人!你检查for循环中iterSongName的值了吗?我记录了iterSong.name,循环中的每首歌都正确。你可以发布循环版本的完整代码吗?你什么时候真正查找路径值?@Dirk I NSLog路径值在循环中。它们不会出现在循环外,因为使用这些路径的AVAudioPlayer只适用于最后一首歌曲。我将整个循环代码添加到了问题中。我认为循环或核心数据没有问题,但我仍然不知道问题出在哪里。如果设置song1.name等,然后使用这些名称(不在循环中)请求路径,会发生什么情况?尝试使用loop insideperformBlock:
方法,并尝试在进行更改后立即保存上下文-到目前为止运气不好,仍然pathForResource:
方法仅为第三首歌曲找到路径。无论如何,感谢您的回答!因为您没有更新inside performBlock,而且在提出问题时也没有保存,我猜会有你的保存和更新项目的方法有问题。我不是100%准确地知道它在哪里,因此需要时间进行调查。但你需要检查我在回答中描述的方法。这是你应该如何编辑和保存对象,而不是脱离上下文。
do {
try managedObjectContext.save()
} catch {
fatalError("Failure to save context: \(error)")
}