gpt4 book ai didi

iphone - 核心数据问题 - 检查项目是否存在

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:23:38 26 4
gpt4 key购买 nike

我正在处理来自 NSScreenCast 的代码示例,该示例处理导入核心数据应用程序 (link)。我有大部分工作的例子。我能够按下刷新按钮,它解析 json 并将其导入到数据库中。但是,每次我按下刷新按钮时,它都会重新添加相同的数据。我已将其追溯到以下代码。

+ (Brewery *)breweryWithServerId:(NSInteger)serverId usingManagedObjectContext:(NSManagedObjectContext *)moc {
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:[Brewery entityName]];

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"serverId = %d", serverId]];
[fetchRequest setFetchLimit:1];

NSError *error = nil;
NSArray *results = [moc executeFetchRequest:fetchRequest error:&error];
NSLog(@"results: %@", results);
if (error) {
NSLog(@"ERROR: %@ %@", [error localizedDescription], [error userInfo]);
exit(1);
}

if ([results count] == 0) {
return nil;
}
NSLog(@"results objectAtIndex:0 = %@", [results objectAtIndex:0]);

return [results objectAtIndex:0];
}

此方法会尝试查看该项目是否已存在于数据库中。如果此调用返回 nil,则 MasterViewController 中的代码会再次将其添加到数据库中。我做了一些调试,serverId 确实通过了。此外,fetchrequest 似乎是有效的(无法确定地调试它)。如您所见,我为结果放置了一个 NSLog,但它返回一个空结果。因此,如果结果计数为 0,则返回 nil。因此我的问题。我没有看到这个问题可能成为问题的任何其他地方。有什么想法吗?

迈克·赖利

最佳答案

我刚刚修改了你的方法,你可以试试看:

+ (Brewery *)breweryWithServerId:(NSInteger)serverId usingManagedObjectContext:(NSManagedObjectContext *)moc {
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:[Brewery entityName]];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"serverId == %d", serverId]];
[fetchRequest setFetchLimit:1];

NSError *error = nil;

// if there's no object fetched, return nil
if ([managedObjectContext countForFetchRequest:fetchRequest error:&error] == 0) {
NSLog(@"!!!WARN: NO Object Matches.");
return nil;
}

// fetch your object
Brewery *result = [[moc executeFetchRequest:fetchRequest error:&error] lastObject];
if (error != nil) {
NSLog(@"ERROR: %@ %@", [error localizedDescription], [error userInfo]);
return nil;
}

NSLog(@"results objectAtIndex:0 = %@", result);
return result;
}

注意:-countForFetchRequest:error: 效率更高,因为它仅“返回给定提取请求本应返回的对象数”。您可以使用此方法检查是否有匹配的对象。

关于iphone - 核心数据问题 - 检查项目是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11572096/

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