【问题标题】:Instantiate a NSManagedObject without saving it实例化一个 NSManagedObject 而不保存它
【发布时间】:2015-07-11 15:24:18
【问题描述】:

我有一个类似的课程:

@objc(User)
class User: NSManagedObject {

    @NSManaged var id: String

    //MARK: - Initialize
    convenience init(id: String,  context: NSManagedObjectContext?) {

        // Create the NSEntityDescription
        let entity = NSEntityDescription.entityForName("User", inManagedObjectContext: context!)


        // Super init the top init
        self.init(entity: entity!, insertIntoManagedObjectContext: context)


        // Init class variables
        self.id = id

    }
}

我在 ViewController 中创建了一个新用户:

managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext!

var aUser = User(id: "500T", context: managedObjectContext)

我有另一个类“组”,其中组有很多用户。为了节省用户,我做了类似

aGroup!.users = NSSet(array: users!)
!managedObjectContext.save

我不想保存所有用户。如何在不保存用户的情况下实例化用户?

【问题讨论】:

  • 只是不要保存。完成用户操作后重置 moc。或者创建一个 NSManagedObject 子类。我相信你可以在 moc 之外使用它们。
  • @RMenke 我刚刚更新了我的问题,因为实际上我不知道在哪里重置,因为我将所有用户存储在一个数组中,然后使用关系将此 NSSet 保存到组
  • 用户有什么不同吗?然后您可以迭代用户数组并保存反向关系。 aUser.group = aGroup 但是要真正解决您的问题,您应该创建另一个与 User 具有相同值类型的类,并仅为需要保存的那些创建 NSManagedObjects
  • @RMenke 实际上我将用户添加到一个数组以存储本地和相同的用户(复制)到一个内存数组只是为了更新一个 tableviewcontroller。可以从组中添加或删除用户。在我的本地数组中,我想存储所有操作历史记录(例如:用户添加到组,用户从组中删除,用户添加到组)并且在表格视图中我只想要最后一个状态(例如基于上一个示例:用户添加分组)。

标签: ios swift core-data ios8


【解决方案1】:

我找到了答案,并在用户初始化中添加了一个 needSave 布尔值。也许这不是最好的答案,但它正在发挥作用。

@objc(User)
class User: NSManagedObject {

    @NSManaged var id: String

    //MARK: - Initialize
    convenience init(id: String, needSave: Bool,  context: NSManagedObjectContext?) {

        // Create the NSEntityDescription
        let entity = NSEntityDescription.entityForName("User", inManagedObjectContext: context!)


        if(!needSave) {
            self.init(entity: entity!, insertIntoManagedObjectContext: nil)
        } else {
            self.init(entity: entity!, insertIntoManagedObjectContext: context)
        }

        // Init class variables
        self.id = id

    }
}

【讨论】:

  • 如果上下文为零,以下代码将如何工作? let entity = NSEntityDescription.entityForName("User", inManagedObjectContext: context!)
【解决方案2】:
@objc(User)
public class User: NSManagedObject {
    
    convenience init(id: String, context: NSManagedObjectContext?) {
        
        // Create the NSEntityDescription
        let entity = User.entity()
        self.init(entity: entity, insertInto: context)


        // Init class variables
        self.id = id
        
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-27
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 2017-10-31
    相关资源
    最近更新 更多