0

Coredata エンティティから一意のユーザー データをフェッチしているときに NSPredicate を使用すると、アプリがクラッシュします。しかし、エラーログはありません。これは使用しているコードです。

if (managedObjectContext == nil) 
{ 
    managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
}


NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Name==%@",selectedUserName];  
NSFetchRequest *fectchreq = [[NSFetchRequest alloc] init];
NSEntityDescription *entitydes = [NSEntityDescription entityForName:@"ALLData" inManagedObjectContext:managedObjectContext];
[fectchreq setEntity:entitydes];
[fectchreq setPredicate:predicate];

NSSortDescriptor *sortdes = [[NSSortDescriptor alloc] initWithKey:@"Name" ascending:YES];
NSArray *sortdesarray = [[NSArray alloc] initWithObjects:sortdes, nil];
[fectchreq setSortDescriptors:sortdesarray];
[sortdes release];
[sortdesarray release];   
NSError *error = nil; 
//NSMutableArray *storeddata = [[[managedObjectContext executeFetchRequest:fectchreq] error:&error] mutableCopy];
NSArray *storeddata = [managedObjectContext executeFetchRequest:fectchreq error:&error];
//[fectchreq release];
NSLog(@"StoreData : %@, count : %d",storeddata, [storeddata count]);

誰でもこの問題を解決するのを手伝ってもらえますか? 前もって感謝します。

4

1 に答える 1

0
NSError *error; 
NSMutableArray *storeddata = [managedObjectContext executeFetchRequest:fectchreq error:error];

このコードを次のように変更する必要があります。

NSError *error = nil;
NSArray *storeddata = [managedObjectContext executeFetchRequest:fectchreq error:&error];

理由: エラー引数はポインターとして渡す必要があります。これは、宣言が-executeFetchRequest:(NSFetchedRequest *)request error:(NSError **)error; また、このメソッドが返すNSArrayものではないためNSMutableArrayです。これについてコンパイラの警告が表示されている必要があります...

于 2012-07-03T07:37:08.087 に答える