I ran into a really simple CoreData issue but it seems hard to solve. 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). 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
.
But what you can do instead is fetch the CoreMessage
objects related to the given user:
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.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.