从 CoreData 中获取比较和删除字符串

Posted

技术标签:

【中文标题】从 CoreData 中获取比较和删除字符串【英文标题】:Fetch compare and delete string from CoreData 【发布时间】:2016-04-12 12:52:20 【问题描述】:

    我想从 CoreData 中删除由自定义单元格中的 UILabel 提供的单个字符串。所以从 tableview 中删除一行是行不通的。

    另外,我想检查一个特定的字符串是否在 CoreData 值中。

例如:

我有一个名为“Favorites”的实体,它有一个名为“services”的属性,我插入了一个名为“micro”的字符串。我想删除“微”。另外,我想检查“micro”(例如)是否在属性“services”和实体“Favorites”的字符串中。

我试过这个:

1.

let serString = servico.text

        let appDel:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        let contexto:NSManagedObjectContext = appDel.managedObjectContext

        let entidade = NSEntityDescription.entityForName("Favorites", inManagedObjectContext: contexto)
        let pedido = NSFetchRequest(entityName: "Favorites")
        pedido.predicate = NSPredicate(format: "service = %@", serString!)
        let p:Favorites? = Favorites(entity: entidade!, insertIntoManagedObjectContext: contexto)
            contexto.deleteObject(p!)

...但它没有删除字符串“serString”

2。 试过这个:

var request : NSFetchRequest = NSFetchRequest(entityName: "Favorites");
    request.predicate = NSPredicate(format: "services = %s", "micro")
    let results : [NSManagedObject] = context.executeFetchRequest(request, error: &error)
    if (results.count > 0) 
        print("exists")        
    else 
        //Doesn't exist
    

...但在“&error”中出现错误,提示“使用未解析的标识符'error'”

2(b).

也试过了,但是输出给出的应用程序崩溃了

"打印错误描述: (NSError) 错误 = “超出范围”

(lldb) "

let request : NSFetchRequest = NSFetchRequest(entityName:     "Favorites");
    request.predicate = NSPredicate(format: "services = %s", "micro")
do 
let results : [NSManagedObject] = try   context.executeFetchRequest(request) as! [Favorites]
if (results.count > 0) 
            print("exists")        
        else 
            //Doesn't exist
        
        // success ...
     catch let error as NSError 
        // failure
        print("Fetch failed: \(error.localizedDescription)")
    

更新:

    这段代码终于可以删除字符串了:

    let favoriteFetchRequest = NSFetchRequest(entityName:"Favorites")
        let predicate = NSPredicate(format: "services = %@", serv)
        favoriteFetchRequest.predicate = predicate
    do 
       let fetchedEntities = try       context.executeFetchRequest(favoriteFetchRequest) as! [NSManagedObject]
    
    for entity in fetchedEntities 
    context.deleteObject(entity)
    try context.save()
    
     catch let error as NSError 
    print("Fetch failed: \(error.localizedDescription)")
    
    

对 2 有帮助吗?

【问题讨论】:

我有一个名为“Favorites”的实体,其属性名为“services”,其中插入了一个名为“micro”的字符串。我想删除“微”。另外,我想检查“micro”(例如)是否在属性“services”和实体“Favorites”的字符串中。 【参考方案1】:

1 .我认为你需要类似的东西:

       contexto.deleteObject(p!)

        do 
            try contexto.save()
            print("Borrado ")
         catch _ as NSError 
            print( "Error en delete")

        

【讨论】:

以上是关于从 CoreData 中获取比较和删除字符串的主要内容,如果未能解决你的问题,请参考以下文章

(C#) 从 TextBox WinForms 的删除字符中获取索引

更改属性类型后的coredata问题

使用 SwiftUI ForEach 从 NSOrderedSet 获取字符串值

Core Data,我如何有效地查找和删除托管对象

必须从 CoreData 调用 fetch 两次

如何从 CoreData 获取完整的对象(不是故障)?