Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.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 CoreData删除单个对象_Ios_Swift_Core Data_Xcode6 - Fatal编程技术网

Ios CoreData删除单个对象

Ios CoreData删除单个对象,ios,swift,core-data,xcode6,Ios,Swift,Core Data,Xcode6,我想删除与值Test匹配的属性name中的实体Person 例如,我在核心数据中保存了这样一个条目:object.setValue(“Test”,forKey:“markedCell”)。现在,我想知道条目“Test”是否保存在属性markedCell中,以及它有哪些索引。我尝试了以下方法: var请求:NSFetchRequest=NSFetchRequest(entityName:“Person”) request.predicate=NSPredicate(格式:“markedCell=%

我想删除与值
Test
匹配的属性
name
中的实体
Person

例如,我在核心数据中保存了这样一个条目:
object.setValue(“Test”,forKey:“markedCell”)
。现在,我想知道条目
“Test”
是否保存在属性
markedCell
中,以及它有哪些索引。我尝试了以下方法:

var请求:NSFetchRequest=NSFetchRequest(entityName:“Person”)
request.predicate=NSPredicate(格式:“markedCell=%@”,“Test”)
var结果:[NSManagedObject]=context.executeFetchRequest(请求,错误:nil)作为[NSManagedObject]

现在我知道条目
“Test”
是否存在,但不知道它有哪个indexPath(如果我知道哪个indexPath正确,我只能删除条目?)。当前我想删除条目
“Test”
(不想将其设置为

我的CoreData模型:

“测试”来自
markedCell
“>

我想从
markedCell
中删除
“Test”

你们中有人知道如何在斯威夫特做到这一点吗

创建单元格(
cellforrowatinexpath
):

崩溃:

我希望这张图片有助于更好地理解我的问题。图片链接:

我只能删除一个条目,如果我知道它有哪个索引,对吗

这是错误的。核心数据对象没有索引路径。 (获取结果控制器管理核心数据对象以供显示 在表视图中,然后有索引路径,但这完全是错误的 这里不相关。)

只需获取一个或多个要删除的对象并删除即可 他们:

对于Swift 3:

       if let dataAppDelegatde = UIApplication.shared.delegate as? AppDelegate {


                let mngdCntxt = dataAppDelegatde.persistentContainer.viewContext

                let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "ItemCart")

                let predicate = NSPredicate(format: "itemId = %i", Int(currentItemID)!)
                print(currentItemID)

                fetchRequest.predicate = predicate
                do{
                    let result = try mngdCntxt.fetch(fetchRequest)

                    print(result.count)

                    if result.count > 0{
                        for object in result {
                            print(object)
                            mngdCntxt.delete(object as! NSManagedObject)
                        }
                    }
                }catch{

                }
            }
如果让DataAppDelegade=UIApplication.shared.delegate作为?AppDelegate{
让mngdCntxt=DataAppDelegade.persistentContainer.viewContext
let fetchRequest=NSFetchRequest(entityName:“ItemCart”)
let predicate=NSPredicate(格式:“itemId=%i”,Int(currentItemID)!)
打印(currentItemID)
fetchRequest.predicate=谓词
做{
let result=尝试mngdCntxt.fetch(fetchRequest)
打印(结果计数)
如果result.count>0{
对于结果中的对象{
打印(对象)
mngdcnText.delete(对象为!NSManagedObject)
}
}
}抓住{
}
}

Ok。因此,如果我删除第一个对象,它就是对象
Test
,如果我删除所有对象,markedCell是空的?@horst:fetch请求获取所有带有“markedCell==Test”的对象(可能有很多)。如果您知道只有一个匹配的对象,那么这无关紧要,否则您必须选择是否要删除一个或所有匹配的对象。好的。
“Test”
也会在
name
中删除。我只想在
markedCell
中删除它(我用图像更新了我的问题)@horst:我不明白你的意思。上面的代码删除了“markedCell==Test”的对象(或所有对象)。它删除了对象及其所有属性。我将
“Test”
存储在
name
markedCell
中。但我只想删除
“Test”“
标记的单元格中
。在
name
“Test”
中,它应该保留。
let request = NSFetchRequest(entityName: "Person")
request.predicate = NSPredicate(format:"markedCell = %@", "Test")
if let results = context.executeFetchRequest(request, error: nil) as? [NSManagedObject] {

    // Delete _all_ objects:
    for object in results {
        context.deleteObject(object)
    }

    // Or delete first object:
    if results.count > 0 {
        context.deleteObject(results[0])
    }

} else {
    // ... fetch failed, report error
}
       if let dataAppDelegatde = UIApplication.shared.delegate as? AppDelegate {


                let mngdCntxt = dataAppDelegatde.persistentContainer.viewContext

                let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "ItemCart")

                let predicate = NSPredicate(format: "itemId = %i", Int(currentItemID)!)
                print(currentItemID)

                fetchRequest.predicate = predicate
                do{
                    let result = try mngdCntxt.fetch(fetchRequest)

                    print(result.count)

                    if result.count > 0{
                        for object in result {
                            print(object)
                            mngdCntxt.delete(object as! NSManagedObject)
                        }
                    }
                }catch{

                }
            }