IPhone

2009-09-19 21 views
6

için çekirdek verilerde çoktan çoğa ilişkileri ile ilgili yardıma ihtiyacım var Güncel projemde bir roadblock'a geldim. Restoran Dize: Kategori isim: Ben temelde çok Çekirdek Veri Reçete uygulaması gibi bir uygulama var ... İşte benim .xcdatamodelIPhone

Varlık sahip temel yapıdır kategori < ---- etmek -çok ilişkisi

Varlık: Kategori Dize: Restaurant isim: restoran < ---- çoğa Yani temelde ilişki , bir restoran olabilir birden çok kategori ... Ve önceden tanımlanmış kategoriler bir const vardır .. Örneğin: Restaura nt: Adı: Chili en Kategoriler: “Take Out” ve “aile yemek”, Family Dining

Dışarıya 2 10 farklı olası Restoran Kategoriler bulunmaktadır. Nasıl

... Ben hem veri var ... nasıl SQLLite veritabanında baktım .. ben bunu hakkında gitmek yapmak ve benim ZRestaurant ve ZCategory masa + ikisi için masaya katılmak zorunda Restoranlar Katagori'mi farklı değerlerle ayarladım mı? ve sonra onları nasıl geri getirebilirim?

Herkese teşekkürler! Kurt

cevap

5

Tamam, sonunda aslında arasında bir karışımı olduğunu benim çözüm geldi son 2 gündür bu konuda çalıştıktan sonra Alex ve Wills önerileri ... İkinize de teşekkürler! İşte

... Ben ne

NSManagedObjectContext *context = [restaurant managedObjectContext]; 


NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Category" inManagedObjectContext:context]]; 
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:&sortDescriptor count:1]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 

NSError *error = nil; 
NSArray *possibleCategories = [context executeFetchRequest:fetchRequest error:&error]; 

categoryArray = [[NSMutableArray alloc] initWithArray:possibleCategories]; 

currentCategories = [restaurant valueForKeyPath:@"categories"]; 

[restaurant addCategoriesObject:(Category *)[possibleCategories objectAtIndex:15 ]]; 

[currentCategories addObject:(Category*)[categoryArray objectAtIndex:15]]; 

olduğunu ve o zaman bu

- (void)save{ 
    NSLog(@"EditCatagoriesTableViewController - save"); 

    NSSet* myCategorySet = [[NSSet alloc] initWithSet:currentCategories]; 

    NSError *error = nil; 

    [restaurant addCategories:myCategorySet]; 


    error = nil; 
    if (![restaurant.managedObjectContext save:&error]) { 
     // Handle error 
     NSLog(@"restaurant - Unresolved error %@, %@", error, [error userInfo]); 
     exit(-1); // Fail 
    }  
} 

gibi tasarruf Ve bu öyle!

İkiniz için çok teşekkürler!

-Kurt

0

Restoranlar Katagori ayarlarımı farklı değerlerle ayarlama hakkında nasıl giderim? ve sonra onları nasıl geri getirebilirim?

(davanızı, "Restoran" değil) bir varlık türde yeni yönetilen nesne örneklerini nasıl ekleneceği gider, Core Data Tutorial for iPhone geçmesi olduğunu yapılacak en iyi şey, o örneğinin özelliklerini (örneğin, "Restoran ayarlayın. kategori ") ve sonuçları getir.

öğretici tarih ve yer özelliklere sahiptir "Olay" adlı bir varlık türünü kullanır, ancak fikirler hep aynıdır.

4

Bunun yerine, böyle bir şey yapmak isteyeyim:

Restaurant *mcDonalds = (Restaurant *)[NSEntityDescription insertNewObjectForEntityForName:@"Restaurant" inManagedObjectContext:managedObjectContext]; 
mcDonalds.name = @"McDonalds"; 

Restaurant *inNOut = (Restaurant *)[NSEntityDescription insertNewObjectForEntityForName:@"Restaurant" inManagedObjectContext:managedObjectContext]; 
inNOut.name = @"In-N-Out"; 

Category *driveThru = (Category *)[NSEntityDescription insertNewObjectForEntityForName:@"Category" inManagedObjectContext:managedObjectContext]; 
driveThru.name = @"Drive Thru to Go"; 

Category *sitDown = (Category *)[NSEntityDescription insertNewObjectForEntityForName:@"Category" inManagedObjectContext:managedObjectContext]; 
sitDown.name = @"Sit Down and Eat"; 

// make NSSet* of Category objects 
NSSet *fastFood = [NSSet setWithObjects:driveThru, sitDown, nil]; 

// set Restaurant instances' categories ("to-many") property 
mcDonalds.categories = fastFood; 
inNOut.categories = fastFood; 

// save changes to managedObjectContext... 
NSError *error = nil; 
if ([managedObjectContext save:&error]) { 
    // handle save error 
} 

doğru bir şekilde Category yönetilen nesnenin örneğini değiliz ve erişimcilere kullanmayı öğrenmek istiyorum. Bunu yaptıktan sonra getirilerin nasıl yapılacağını daha iyi öğreneceksiniz.

Dürüst, yanına projenizi koyarak ve Core Data Tutorial for iPhone geçmekte öneriyoruz.

4

NSManagedObject alt sınıfınızda "-addCatagoryObject:" gibi bir yöntemi çağırmak isterseniz, bu yöntem için geçerli .m dosyanızdaki kodun olması gerekir - çalışma zamanında oluşturulmaz. Eğer Xcode yöntem tanımlarını ve uygulamalarını kopyalamak için izin çeşitli menü öğelerini bulun -

ANCAK, yarı otomatik Xcode tarafından sizin için oluşturulabilir.

Çoğu kişi sadece çalışma zamanı sizin için erişimci kodu oluşturmak sağlayabilirsiniz :, sen -addCategoryObject aramaya İHTİYACINIZ yok, günümüzde bu atlayın.

İlk kapalı, değişken adınız (üstbilgide ve modelinizde) "kategori" değil, "tekil" değil, kümeyi temsil ettiği için "kategoriler" olmalıdır.

Daha sonra böyle bir şey kullanarak, istediğiniz herhangi bir kümesine kategoriler ayarlayabilirsiniz:

restaurant.categories = [NSSet setWithObjects:category1, category2, nil]; 
+0

.. Eğer yanıt için .. benim sorun benim kodunda bir yerde başka bir şey olabileceğini düşünüyorum Will ederiz çünkü bu hala benim SQLLite db bakıyorum, çalışmıyor ve herhangi alamayan Birleştir tablosunda yer alan restoranımla ilişkilendirilecek veya ilişkilendirilecek veriler. Bunu anladığımda geri göndereceğim. Çok teşekkür ederim! – Kurt