Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在循环中编辑核心数据模型对象_Ios_Objective C_Xcode_Core Data - Fatal编程技术网

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 inside
performBlock:
方法,并尝试在进行更改后立即保存上下文-到目前为止运气不好,仍然
pathForResource:
方法仅为第三首歌曲找到路径。无论如何,感谢您的回答!因为您没有更新inside performBlock,而且在提出问题时也没有保存,我猜会有你的保存和更新项目的方法有问题。我不是100%准确地知道它在哪里,因此需要时间进行调查。但你需要检查我在回答中描述的方法。这是你应该如何编辑和保存对象,而不是脱离上下文。
do {

        try managedObjectContext.save()
    } catch {
        fatalError("Failure to save context: \(error)")
    }