CoreData 删除单个对象

hor*_*rst 4 core-data ios swift xcode6

我想删除实体中与 value 匹配Person的属性的条目。nameTest

比如我保存了进入核心数据是这样的:object.setValue("Test", forKey: "markedCell")。现在我想知道条目"Test"是否保存在属性中markedCell以及它具有哪个 indexPath。我尝试了以下一个:

var request:NSFetchRequest = NSFetchRequest(entityName: "Person") request.predicate = NSPredicate(format:"markedCell = %@", "Test") var results : [NSManagedObject] = context.executeFetchRequest(request, error: nil) as [NSManagedObject]

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

我的 CoreData 模型:

我想从 <code>markedCell</code> 中删除 <code>"Test"</code>

我想"Test"markedCell.

你们中有人知道如何在 Swift 中做到这一点吗?

创建单元格 ( cellForRowAtIndexPath):

//Get task
    let context = self.fetchedResultsController.managedObjectContext
    let object = self.fetchedResultsController.objectAtIndexPath(indexPath) as NSManagedObject
    var taskString:NSString?
    taskString = object.valueForKey("name") as? String
    cell.textLabel!.text = object.valueForKey("name") as? String

    println(object.valueForKey("name") as? String)

    //Set accessory type
    var request:NSFetchRequest = NSFetchRequest(entityName: "Person")
    request.predicate = NSPredicate(format:"markedCell = %@", taskString!)
    var results : [NSManagedObject] = context.executeFetchRequest(request, error: nil) as [NSManagedObject]
    if (results.count > 0) {
        //Element exists
        cell.accessoryType = UITableViewCellAccessoryType.None
        println("Cell isn't marked")
    }
    else {
        //Doesn't exist
        cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator
        println("Cell is marked")
    }
Run Code Online (Sandbox Code Playgroud)

碰撞:

在此处输入图片说明

在此处输入图片说明

我希望这张图片有助于更好地理解我的问题。图片链接:https : //www.dropbox.com/s/h5g4yeoedg0xjjv/Stackoverflow_Question.png?dl=0

Mar*_*n R 6

如果我知道哪个 indexPath 正确,我只能删除一个条目?

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

只需获取对象或要删除的对象并删除它们:

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
}
Run Code Online (Sandbox Code Playgroud)