【问题标题】:CoreData limit related entities batch sizeCoreData 限制相关实体批量大小
【发布时间】:2015-12-03 10:55:15
【问题描述】:

我遇到了一个非常简单的 CoreData 问题,但似乎很难解决。编写一个简单的聊天应用程序,每个用户都有很多消息。

class CoreUser: NSManagedObject
{
    @NSManaged var firstname: String?
    @NSManaged var id: String?
    @NSManaged var lastname: String?
    @NSManaged var nickname: String?
    @NSManaged var messages: NSSet
}

class CoreMessage: NSManagedObject
{
    @NSManaged var body: String?
    @NSManaged var owner: CoreUser
    @NSManaged var state: String
    @NSManaged var timestamp: NSDate
}

关系是:一对多

获取用户实体:

func getCoreUser(userId: String) -> CoreUser?
{
    var error: NSError?;
    let fetchRequest = NSFetchRequest(entityName: "CoreUser");
    let nodeId = NSString(string: userId.lowercaseString);
    let pred = NSPredicate(format: "id == %@", nodeId);
    fetchRequest.fetchLimit = 1;
    fetchRequest.predicate = pred;
    let fetchResults = self.managedObjectContext!.executeFetchRequest(fetchRequest, error: &error) as? [CoreUser];

    if let results = fetchResults
    {
        return results.first;
    }
    return nil;
}

如何限制相关消息实体(20 条消息,按日期排序)。结果数组包含来自该用户的所有消息。

感谢您的帮助。

【问题讨论】:

    标签: ios swift sqlite core-data


    【解决方案1】:

    获取请求总是从托管对象上下文返回对象。您无法获取“修改过的”对象,例如CoreUserCoreMessage 具有“受限”关系的对象。

    但是您可以做的是获取相关的 CoreMessage 对象 给给定的用户:

    let fetchRequest = NSFetchRequest(entityName: "CoreMessage")
    fetchRequest.predicate = NSPredicate(format: "owner.id == %@", nodeId)
    

    现在您可以添加获取限制来限制检索到的数量 消息:

    fetchRequest.fetchLimit = 20
    

    加上合适的排序描述符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-20
      相关资源
      最近更新 更多