フェッチリクエストを実行する必要があります。しかし、それを実行すると、障害は発生しませんNSManagedObject
(各オブジェクトは約5 Mbであるため、メモリ警告が表示されます)。Appleは、Core Dataに障害が発生する可能性を提供しています(オブジェクトがRAMにロードされていない場合)。そして、私は自分のオブジェクトにこの可能性を利用させたいと思っています。
これが私のコードです
+ (NSMutableSet *)GetImagesWithPredicate:(NSPredicate *)predicate
{
NSString *entityName = kEntityName;
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];;
NSManagedObjectContext *context = appDelegate.managedObjectContext;
NSEntityDescription *entityDesctiption = [NSEntityDescription
entityForName: entityName
inManagedObjectContext:context];
// find object
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDesctiption];
[request setPredicate:predicate];
NSArray *objects = [context executeFetchRequest:request error:nil];
[request release];
if (objects == nil)
{
NSLog(@"there was an error");
return nil;
}
NSMutableSet *set = [NSMutableSet setWithArray:objects];
return set;
}
ここで、述語は(id < 500)
です。
後にアプリがクラッシュする
NSArray *objects = [context executeFetchRequest:request error:nil];
オブジェクトのすべてのデータがiPhoneのRAMに表示されるためです。
デフォルトのオプションreturnsObjectsAsFaults = YES
が機能しないようです。