gpt4 book ai didi

IOS Coredata 检查属性是否存在

转载 作者:行者123 更新时间:2023-11-29 01:33:03 27 4
gpt4 key购买 nike

我正在从事基于核心数据和基于 XML 解析 [RSS Feed] 的项目。我必须检查 coredata 中的属性值是否可用?

例如:-

我的数据模型中有 3 个属性。 名称、网站名称和 feedurl。现在我必须用用户输入解析 url。但在解析时我想检查 URLNAME 是否在 coredata 中可用。如果可用,那么将在不插入到 coredata 的情况下完成解析,如果 URL 不在 coredata 中,那么它将被插入到 coredata 中。

这是我尝试在核心数据中插入 url 的地方。但是使用这种方法,相同的 url 也会输入到核心数据中。

- (void)feedParserDidFinish:(MWFeedParser *)parser {

[HUD hide:YES];
//**Coredata inserting value**//
NSManagedObjectContext *context = [self managedObjectContext];

// Create a new managed object
NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"I" inManagedObjectContext:context];
[newDevice setValue:self.Name forKey:@"name"];
[newDevice setValue:self.WebsiteName forKey:@"websitename"];
[newDevice setValue:self.Feedlink forKey:@"feedurl"];

NSError *error = nil;
// Save the object to persistent store
if (![context save:&error]) {
NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}

//**Parsing url**//

NSLog(@"Finished Parsing%@", (parser.stopped ? @" (Stopped)" : @""));
NSArray* array =[parsedItems sortedArrayUsingDescriptors:
[NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:@"date"
ascending:NO]]];
NSMutableDictionary* dict = [NSMutableDictionary new];
[dict setObject:chanelInfo forKey:@"title"];
[dict setObject:array forKey:@"data"];
[sectionheaders addObject:dict];
NSLog(@"SectionHeader Count:%ld",(long)sectionheaders.count);
[self updateTableWithParsedItems];


}

最佳答案

如果你想阻止插入一个已经存在的对象,你有两个基本的选择。

首先是检查它是否存在,只有当它不在数据库中时才创建新的弹出。

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"I"];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"feedurl = %@", self.Feedlink];
if ([[moc executeFetchRequest:fetchRequest error:NULL] count] == 0) {
// Create a new managed object
}

第二种是使用 iOS9 中引入的新的唯一约束。详见WWDC 2015核心数据展示。

请注意,如果您有很多对象,您可能应该允许为您搜索的属性建立索引,否则您最终将对每个对象进行线性搜索。

此外,如果您解析大量对象,最好一次搜索多个项目,和/或使用更好的算法。

WWDC 2013“核心数据性能”演示文稿中有一个您应该研究的实现“更新或插入”的优秀示例。

关于IOS Coredata 检查属性是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33259374/

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