gpt4 book ai didi

ios - CoreData insertNewObjectForEntityForName 和 executeFetchRequest 返回 nil

转载 作者:可可西里 更新时间:2023-11-01 03:31:14 25 4
gpt4 key购买 nike

我会尝试揭露我的问题,因为它有点复杂。我使用 Core Data,但存储的数据有问题。当我使用这段代码时:

NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"ItemMessage"];
NSError *error = nil;
NSArray *results = [context executeFetchRequest:request error:&error];
NSMutableArray *values = [[NSMutableArray alloc] init];

if (error == nil) {
for (int i = 0; i<results.count; i++) {
NSLog(@"results %@",[results objectAtIndex:i]);
ItemMessage *itemMessage = [results objectAtIndex:i];
[values addObject:itemMessage];
}

等等。问题是 NSLog 打印的值是正确的(“结果”包含一些东西)但是 itemMessage 总是包含 0 个键/值对(它看起来是空的)。为了了解问题所在,我回头看到在 insertNewObjectForEntityForName 中我也遇到了这个问题,这是我在 Core Data 中保存消息数据时使用的代码:

for (id key in objectMessage) {
ItemMessage *itemmessage = [[ItemMessage alloc] init];
itemmessage.itemMessageId = [key objectForKey:@"itemMessageId"];
itemmessage.message = [key objectForKey:@"message"];
itemmessage.sender = [key objectForKey:@"sender"];
itemmessage.users = [key objectForKey:@"users"];

NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSManagedObject *newMessage;
newMessage = [NSEntityDescription insertNewObjectForEntityForName:@"ItemMessage" inManagedObjectContext:context];
[newMessage setValue: itemmessage.itemMessageId forKey:@"itemMessageId"];
[newMessage setValue: itemmessage.message forKey:@"message"];
[newMessage setValue: itemmessage.sender forKey:@"sender"];
[newMessage setValue: itemmessage.users forKey:@"users"];
[context save:&error];
if (error != nil) {
NSLog(@"Coredata error");
}

问题是 insertNewObjectForEntityForNamesetValue 之后的 newMessage 也包含 0 个键/值对。你能帮帮我吗?

最佳答案

您似乎没有将新的托管对象正确地插入到上下文中。
应该是:

for (id key in objectMessage) {
NSManagedObjectContext *context = [appDelegate managedObjectContext];
ItemMessage *itemmessage = (ItemMessage*)[NSEntityDescription insertNewObjectForEntityForName:@"ItemMessage"
inManagedObjectContext:context];
itemmessage.itemMessageId = [key objectForKey:@"itemMessageId"];
itemmessage.message = [key objectForKey:@"message"];
itemmessage.sender = [key objectForKey:@"sender"];
itemmessage.users = [key objectForKey:@"users"];
}
//save your inserts

要为您的托管对象创建类文件,您可以:

转到您的模型文件 (xcdatamodeld) ->
选择一个实体 ->
从菜单中选择:
编辑器-> 创建 NSManagedObjectSubclass -> 选择您喜欢的类文件的实体。

现在您将拥有可以轻松访问的托管对象(NSManagedObject 子类)并受益于 CoreData 功能。

关于ios - CoreData insertNewObjectForEntityForName 和 executeFetchRequest 返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21727258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com