Core Data を使用して、アプリの情報を保存しています。8 つのエンティティを含む .xcdatamodeld ファイルがあり、それらをさまざまなビューで抽出します。
viewController の 1 つで、そのうちの 3 つを呼び出します。このような:
AppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication]delegate];
managedObjectContext = appDelegate.managedObjectContext;
NSManagedObjectContext *moc = [self managedObjectContext];
NSEntityDescription *entiAll = [NSEntityDescription entityForName:@"AllWeapons" inManagedObjectContext:moc];
NSFetchRequest *frAll = [[NSFetchRequest alloc] init];
[frAll setEntity:entiAll];
NSError *error = nil;
arrAll = [moc executeFetchRequest:frAll error:&error];
displayArray = [[NSMutableArray alloc]initWithArray:arrAll];
NSEntityDescription *entiRange = [NSEntityDescription entityForName:@"WeaponsRanged" inManagedObjectContext:moc];
NSFetchRequest *frRanged = [[NSFetchRequest alloc] init];
[frRanged setEntity:entiRange];
NSError *errorRanged = nil;
arrRange = [moc executeFetchRequest:frRanged error:&errorRanged];
NSLog(@"%i, %i", [arrRange count], [[moc executeFetchRequest:frRanged error:&errorRanged] count]);
NSEntityDescription *entiMelee = [NSEntityDescription entityForName:@"WeaponsMelee" inManagedObjectContext:moc];
NSFetchRequest *frMelee = [[NSFetchRequest alloc] init];
[frMelee setEntity:entiMelee];
NSError *errorMelee = nil;
arrMelee = [moc executeFetchRequest:frMelee error:&errorMelee];
NSLog(@"%i, %i", [arrMelee count], [[moc executeFetchRequest:frMelee error:&errorMelee] count]);
問題は、真ん中のもの (arrRange-array を満たすもの) が機能しないことです..
arrAll はすべて正しいデータでログアウトし、arrMelee はすべて正しいデータでログアウトします (何らかの理由で x4、これが関連しているかどうかはわかりません:S)、arrRange は空の配列としてログアウトします。
[arrRange count];
そこにたくさんのデータがあることはわかっていますが、0になります。このコードをシミュレーターで実行したところ、.sqlite ファイルが見つかり、それを Firefox の SQLite Manager で開いたところ、40 行の正しいデータが表示されました。
appDelegate に入り、必要に応じて CoreData を入力し、データを JSON 形式でダウンロードするメソッドがデータを sqlite にも正常に送信することを確認しました。
ここでは、CoreData に json からのデータを入力します。
[self deleteAllObjects:@"WeaponsRanged"];
NSManagedObjectContext *context = [self managedObjectContext];
for(NSDictionary *item in jsonWeaponRanged)
{
WeaponsRanged *wr = [NSEntityDescription insertNewObjectForEntityForName:@"WeaponsRanged"
inManagedObjectContext:context];
///***///
wr.recoil = [item objectForKey:@"Recoil"];
///***///
NSError *error;
if(![context save:&error])
NSLog(@"%@", [error localizedDescription]);
}
ここNSLog(@"%@ - %@", wr.recoil, [item objectForKey:@"Recoil"]);
に行けば、正しいデータが得られます。(どちらも同じデータ)
そう。正しいデータは明らかにコアにあります。しかし、私の NSFetchRequest か何かが失敗しています。私は Objective-C にかなり慣れていないので、私の悪いコード文法が再び印象的である可能性があります。常に新しいオブジェクトを作成するのではなく、もう一度使用する必要があることを理解しています..しかし、cmon、これは私の最初のアプリです..そして、それが実際に問題である場合、私は学ぶかもしれません. しかし、私は立ち往生しています。
データを取得する場合もあれば、取得しない場合もあります。それは奇妙だ。アプリを再起動し、そこからデータを取得しましたが、今はありません.. パターンはまだ見つかりません..
誰?または、エンティティからデータを要求する別の方法はありますか?