ios - CoreData 限制相关实体的批量大小

标签 ios swift sqlite core-data

我遇到了一个非常简单的 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 条消息,按日期排序)。结果数组包含来自该用户的所有消息。

感谢您的帮助。

最佳答案

获取请求总是从托管对象上下文中返回对象。您不能获取“修改过的”对象,例如CoreUser 对象与 CoreMessage 具有“受限”关系。

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

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

现在你可以添加一个获取限制来限制获取的数量 消息:

fetchRequest.fetchLimit = 20

连同合适的排序描述符。

关于ios - CoreData 限制相关实体的批量大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32446217/

相关文章:

ios - 向添加到 UIWindow 的 View 添加约束时,为什么我无法设置自动布局约束?

ios - Admob Native Advanced 不可点击

ios - XCode 8 Playground 执行失败,无法查找符号

javascript - 在executeAsync 上多次调用handleResult?

android - 检索 sqlite blob 字段以放入 imageview

ios - 为什么我的 SearchController 只匹配第一个字符?

ios - 如何打印相机闪光灯是否打开(Swift 4)

swift - 对象标识和协议(protocol)

ios - UIImageView 大小相对于屏幕大小

import - 使用import命令时是否可以告诉Sqlite忽​​略尾随字段分隔符?