gpt4 book ai didi

iphone - 如何以最少的代码循环从 Core Data 中的多个实体加载数据?

转载 作者:行者123 更新时间:2023-12-03 17:07:02 25 4
gpt4 key购买 nike

我正在尝试使加载多个实体在代码中更易于管理。下面的代码附加到一个可以加载超过 1000 次的对象,因此我将其放入一个循环中并附加了一个可管理的实体数组。

问题是,因为我不知道 singleObject 中是否有可用的 key ,所以当我在导演实体上时,我在 [singleObject valueForKey:@"actor"] 上发生崩溃。这是因为关键的“ Actor ”不存在。请在此处查看我的代码。

NSArray *entities = [[NSArray alloc] initWithObjects: @"actors", @"directors", @"subtitles", @"audios", nil];

for (NSString *anEntity in entities)
{
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:anEntity inManagedObjectContext:context];
[request setEntity:entityDescription];
NSArray *objects = [context executeFetchRequest:request error:&error];
if (objects == nil) {
// error
}

for (NSManagedObject *singleObject in objects)
{
if (singleObject != nil)
{
if ([singleObject valueForKey:@"actor"] != nil)
{
[self.actors addObject:[singleObject valueForKey:@"actor"]];
}
else if ([singleObject valueForKey:@"director"] != nil)
{
[self.directors addObject:[singleObject valueForKey:@"director"]];
}
else if ([singleObject valueForKey:@"subtitle"] != nil)
{
[self.subtitles addObject:[singleObject valueForKey:@"subtitle"]];
}
else if ([singleObject valueForKey:@"audio"] != nil)
{
[self.audios addObject:[singleObject valueForKey:@"audio"]];
}
}
}
}

[entities release];
[request release];'

我怎样才能让这段代码工作,并且可以极大地扩展,而不必在所有东西周围放置一堆 try/catch?

最佳答案

好吧,我想我找到了一种适合我的方法,使用 NSDictionary 代替。它在我的情况下起作用只是因为我的实体名称是复数( Actor )而我的属性是单数( Actor )。这是我想到的:

NSMutableDictionary *entities = [[NSMutableDictionary alloc] init];
[entities setValue:actors forKey:@"actors"];
[entities setValue:directors forKey:@"directors"];
[entities setValue:subtitles forKey:@"subtitles"];
[entities setValue:audios forKey:@"audios"];

for (NSMutableString *aKey in entities)
{
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:aKey inManagedObjectContext:context];
[request setEntity:entityDescription];
NSArray *objects = [context executeFetchRequest:request error:&error];
if (objects == nil) {
// error
}

for (NSManagedObject *singleObject in objects)
{
if (singleObject != nil)
{
if ([singleObject valueForKey:[aKey substringToIndex:[aKey length] - 1]] != nil)
{
[[entities valueForKey:aKey] addObject:[singleObject valueForKey:[aKey substringToIndex:[aKey length] - 1]]];
}
}
}
}

详细信息:

我循环遍历字典中的键。我让它们可变,这样我就可以去掉键末尾的 s。然后我从该键中提取值(这是一个数组),并使用不带 s 的键加载该数组。

阅读代码有点复杂,但确实降低了可管理性。现在我需要做的就是添加一个具有匹配单数属性的新复数实体,然后将键/值对添加到字典中。

关于iphone - 如何以最少的代码循环从 Core Data 中的多个实体加载数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4911755/

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