2013-03-03 27 views
5

Bir dizgenin veritabanına kaydedilip kaydedilmediğini kontrol etmesi gereken bir geliştirme ve uygulama geliştiriyorum. Bu kolay bir işlem gibi görünse de, sanırım oldukça fazla olduğunu düşündüğüm herhangi bir cevabı vermek için yarım saniyeye ihtiyaç duyuyor. Sorum şu, bu zamanı azaltmak için herhangi bir yol varsa. İlginiz için teşekkürler.Çekirdek Verileri getirme isteği eniyilemesi

Bu benim geçerli kod: sadece nesnelerin varlığını kontrol etmek istiyorsanız

- (BOOL) isDeleted:(int)i { 

    NSString *value = [NSString stringWithFormat:@"deleted.*.%i", i]; 

    MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    NSManagedObjectContext *context = [appDelegate managedObjectContext]; 

    NSString *entityName = @"Deleted"; 
    NSEntityDescription *entityDesc = [NSEntityDescription entityForName:entityName inManagedObjectContext:context]; 
    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    [request setEntity:entityDesc]; 

    NSPredicate *pred = [NSPredicate predicateWithFormat:@"(deletedpics like %@)", value]; 
    [request setPredicate:pred]; 

    NSError *error; 
    NSArray *objects = [context executeFetchRequest:request error:&error]; 

    BOOL returnBool = [objects count] >= 1 ? YES : NO; 
    return returnBool; 

} 
+0

Varlıkları ve ilişkileri açıklar mısınız? Ben yüklemeyi tam olarak anlamıyorum. –

+0

Farklı varlıklar arasında ilişki yok. Özellikle, bu varlık sadece _deletedpics_ adlı bir özellik içerir. Öngörüye atıfta bulunulan fikir, resmin silinmiş olarak bildirilip bildirilmediğini kontrol etmektir. Silinen kayıtları "delete.status (diğer işlemler için ihtiyacım olan değişken) .picturenumber" olarak düzenlerim. Bu fonksiyonda, belirli bir resmin silinip silinmediğini kontrol etmek istiyorum. Bu yüzden bu yüklemeyi kullandım. Umarım artık daha açık. –

+0

Bu özelliği dizine eklemeye çalışın. '@ 'Ne silindi. *.% I" demek? –

cevap

5

Bir optimizasyon

[request setFetchLimit:1]; 
NSUInteger count = [context countForFetchRequest:request error:&error]; 

tarafından

NSArray *objects = [context executeFetchRequest:request error:&error]; 

değiştirmektir.

Ancak, asıl performans sorununun LIKE numaralı joker arama olduğunu ve == ile aramadan daha yavaş olduğunu düşünüyorum. Bunun yerine muhtemelen ayrı özelliğe status, tarafta picturenumber kullanmak daha iyi olurdu (bir yorumda yazdığı gibi) durumu ve deleted.<status>.<picturenumber> gibi bir Özellikte resim numarasını depolama

.

Sonra çok daha hızlı olmalı yüklemi

[NSPredicate predicateWithFormat:@"picturenumber == %d", i]; 

ile bir resim numarası için arama yapabilirsiniz. Gerekirse, bu özelliği ek olarak indeksleyebilirsiniz (@flexaddicted).

+0

+1 Cevap vermek için zamanım olmadı ama seninki iyiydi. Yorumumu aktardığın için teşekkürler. –

+0

@flexaddicted: Teşekkürler :-) –