Predicate Coredata и вход для получения долгоIOS

Программируем под IOS
Ответить
Anonymous
 Predicate Coredata и вход для получения долго

Сообщение Anonymous »

У меня есть этот кусок кода: < /p>

-(void)createArtistsFromArray:(NSArray*)jsonAttrArr {

NSError *fetchError = nil;
if (jsonAttrArr) {

for(NSMutableDictionary *dic in jsonAttrArr) {

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Artists" inManagedObjectContext:[sharedAppDelegate managedObjectContext]]];
NSPredicate *predicateById = [NSPredicate predicateWithFormat:@"artistId == %@", [dic objectForKey:@"artistId"]];
[fetchRequest setPredicate:predicateById];

NSArray *categorisItems = [[sharedAppDelegate managedObjectContext] executeFetchRequest:fetchRequest error:&fetchError];

Artists *artistObj = [NSObject returnItemUsingFetchingResults:categorisItems andEntityName:@"Artists"];
[self setAttrForEntity:artistObj withDictionary: dic];
[self createElementEntityFromDictionary:dic andArtist:artistObj];

}

}
NSError *error;
if (![[sharedAppDelegate managedObjectContext] save:&error])
NSLog(@"Error saving - error:%@" , error);

}

-(IBAction)createElementEntityFromDictionary:(id)sender andArtist:(Artists*)aObj {

NSMutableOrderedSet* setWithElements = [[NSMutableOrderedSet alloc] init];
NSError *fetchError = nil;

NSArray *elements = [(NSDictionary*)sender objectForKey:@"elements"];

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Element" inManagedObjectContext:[sharedAppDelegate managedObjectContext]]];

int forCounter = 0;
for (NSDictionary *elementInputDictionary in elements) {

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"elementId == %i", [[elementInputDictionary objectForKey:@"elementId"] integerValue]]];
NSArray *items = [[sharedAppDelegate managedObjectContext] executeFetchRequest:fetchRequest error:&fetchError];

Element* outputElement = [NSObject returnItemUsingFetchingResults:items andEntityName:@"Element"];
[outputElement setCatId:aObj.artistId];
[outputElement setOrderNo:forCounter];

[self setAttrForEntity:outputElement withDictionary: elementInputDictionary];

outputElement.images = [self setImagesToElement:outputElement fromList:[elementInputDictionary objectForKey:@"imagesList"]];
[setWithElements addObject: outputElement];
forCounter++;

aObj.elements = setWithElements;
}

NSError *error;
if (![[sharedAppDelegate managedObjectContext] save:&error]) {
NSLog(@"Error saving - error:%@" , error);
}

}

-(void)setAttrForEntity:(id)entityName withDictionary:(NSDictionary*)attrDictionary {
NSDictionary *attributes = [[entityName entity] attributesByName];
for (NSString *attribute in attributes) {
id value = [attrDictionary objectForKey:attribute];
if (!value) continue;
[entityName setValue:value forKey:attribute];
}
}
< /code>

в категории nsobject: < /p>

+(id)returnItemUsingFetchingResults:(NSArray*)fResults andEntityName:(NSString*)name {
if([fResults isEmpty])
return [NSEntityDescription insertNewObjectForEntityForName:name inManagedObjectContext:[sharedAppDelegate managedObjectContext]];
else
return [fResults firstObject];
}
< /code>

И эта операция занимает некоторое время (для 800 артистов объекта около 45 секунд). Это нормально? Или, может быть, что -то не так с моим подходом здесь?>

Подробнее здесь: https://stackoverflow.com/questions/163 ... ay-to-long
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»