У меня есть этот кусок кода: < /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
Predicate Coredata и вход для получения долго ⇐ IOS
Программируем под IOS
-
Anonymous
1758571067
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 секунд). Это нормально? Или, может быть, что -то не так с моим подходом здесь?>
Подробнее здесь: [url]https://stackoverflow.com/questions/16386711/coredata-predicate-and-fetch-input-takes-way-to-long[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия