简体   繁体   English

CoreData限制相关实体的批次大小

[英]CoreData limit related entities batch size

I ran into a really simple CoreData issue but it seems hard to solve. 我遇到了一个非常简单的CoreData问题,但似乎很难解决。 Writing a simple chat app where every user has many messages. 编写一个简单的聊天应用程序,其中每个用户都有很多消息。

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
}

The relationship is: one-to-many 关系是:一对多

Fetching user entity: 正在获取用户实体:

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;
}

How can I limit the related message entity (20 messages, sorted by date). 如何限制相关的消息实体(20条消息,按日期排序)。 The result array contains all the messages from this user. 结果数组包含该用户的所有消息。

Thx for helping. 感谢帮助。

A fetch request always returns the objects from the managed object context. 提取请求始终从托管对象上下文返回对象。 You cannot fetch "modified" objects, eg CoreUser objects with a "restricted" relationship to CoreMessage . 你不能取“修改”对象,例如CoreUser与“限制”关系对象CoreMessage

But what you can do instead is fetch the CoreMessage objects related to the given user: 但是您可以做的是获取与给定用户相关的CoreMessage对象:

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

and now you can add a fetch limit to restrict the number of retrieved messages: 现在,您可以添加抓取限制以限制检索到的消息数:

fetchRequest.fetchLimit = 20

together with a suitable sort descriptor. 以及合适的排序描述符。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM