我正在使用核心數據來存儲我的應用程序的一些信息。 我有一個包含8個實體的.xcdatamodeld文件,我將它們提取到不同的視圖中。沒有從核心數據獲取數據
在其中一個viewControllers中,我打電話給他們三個。就像這樣:
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陣列)不工作..
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,這是我的第一個應用程序。如果這實際上是問題,我可能會學習。但我卡住了。
有時我得到的數據,有時候我沒有。有點奇怪。我重新啓動了應用程序,並從中獲取了數據,現在我不.. ..我還沒有找到一個模式..
有人嗎? 還是有另一種方式來從實體請求數據?
您是否從網絡上獲取JSON數據?如果是這樣,你可以顯示你的加載例程的代碼。 –
嗯..我不認爲這與它有任何關係..正如我所說的,數據總是在coredata中,但不會在查詢時返回。我已經在所有這些方法中使用了相同的方法,並且我已經證明了.sqlite通過在FireFox中的SQLite管理器中打開它來包含數據。 – Sti
你可以遍歷數組並打印'WeaponsRanged'對象嗎?例如'for(NSManagedObject * obj in arrRange){NSLog(@「 - >%@」,[obj valueForKey:@「aKey」]); }'。讓我知道你看到了什麼。 –