Objective c 如果核心数据存在于另一个表中,则要求其获取数据。目标C
目前,我正在尝试使用以下核心数据进行查询 我想查询: 存在于Room_消息上的所有文件室 目前我有以下代码Objective c 如果核心数据存在于另一个表中,则要求其获取数据。目标C,objective-c,core-data,nspredicate,Objective C,Core Data,Nspredicate,目前,我正在尝试使用以下核心数据进行查询 我想查询: 存在于Room_消息上的所有文件室 目前我有以下代码 // Initialize Fetch Request NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Rooms"]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"room_messages
// Initialize Fetch Request
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Rooms"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"room_messages.@count > 0"];
// also tried room_messages.@count != 0 but the same thing no results
[fetchRequest setPredicate:predicate];
NSError *error;
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"last_seen_date" ascending:NO];
[fetchRequest setSortDescriptors:@[sortDescriptor]];
// Initialize Fetched Results Controller
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:[[coreDataHelpers sharedInstance] managedObjectContext]
sectionNameKeyPath:nil
cacheName:nil];
self.fetchedResultsController.delegate = self;
BOOL success = [self.fetchedResultsController performFetch:&error];
if (!success) {
if (error) {
NSLog(@"FetchedResultsController failed with error: %@", error.localizedDescription);
}
}
这是聊天室对话列表。我只需要向用户显示包含消息的房间。那些在房间信息上没有信息的人不需要它们。。直到他们在我的查询结果上有消息。您需要筛选消息计数为零的房间。假设与“Message”的多对多关系称为
messages
:
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"messages.@count > 0"];
我找到的问题答案提供了我想要的结果,尽管我不知道这是否是最好的答案。在保存新的输入消息之前,我必须添加这行代码
[messageObject addRoomsObject:roomObject];
RoomObject只是该特定消息的房间的键值,所以假设我插入了一条新消息。此邮件属于特定的房间。这个房间的价值就是我从钥匙里得到的。所以我最后的代码是
// Create a new managed object
Message *messageObject = [NSEntityDescription insertNewObjectForEntityForName:@"Message"
inManagedObjectContext:[[coreDataHelpers sharedInstance] managedObjectContext]];
messageObject.message = payload[@"message"];
messageObject.date = [NSDate date];
messageObject.type_message = payload[@"type_message"];
messageObject.room_key = [NSString stringWithFormat:@"%@", payload[@"room"]];
messageObject.user_id = payload[@"user_sender"];
messageObject.read = @YES;
// Make relation between both Entitites
[messageObject addRoomsObject:roomObject];
NSError *error;
BOOL saved = [[[coreDataHelpers sharedInstance] managedObjectContext] save:&error];
if (!saved) {
if (error) {
[self makeAlert:@"Error"
subTitle:error.localizedDescription
buttonOk:@"Ok"];
}
}
else {
[SimpleAudioPlayer playFile:@"message_sent.aiff"];
[[coreDataHelpers sharedInstance] lastSeenRoom:payload[@"room"] lastMessage:payload[@"message"]];
[[coreDataHelpers sharedInstance] updateLastSeenDateUser:payload[@"user_sender"]];
}
我更新了我的问题描述并添加了图片,你能看一下吗。。根据你所做的预测。谢谢你,我的回答仍然不起作用。。任何基于@mundiI图像的想法都应该可行。您可能没有将消息分配给房间。我分配了@mundi,但它没有显示任何结果。我得到了0行。这很奇怪。如果谓词不正确,它通常会抛出一个错误。尝试使用
=0
,看看是否获得了预期的所有记录。