2010-11-20 14 views
0

Öyleyse, bir Çekirdek veri nesnesine sahibim, onu bir oturum olarak adlandıralım (Tamam, gerçekte bu denir), ve içinde göstermek istediğim dört özniteliğe (Ad, Sürücü, Parça ve Araba) sahiptir. tablo görünümü. Daha önce çalıştım, ama, alas, kontrolörlerimi biraz daha genel ve tekrar kullanılabilir hale getirmeye çalışıyorum, bu yüzden biraz değiştiriyorum. Anywho, burada görünümü denetleyicisi içine geçti alt textUITableView ve CoreData - Belirli Satırlarda ve Verimlilikte Verileri Görüntüleme?

bir Oturum, CoreData bana çırpılmış olduğunu NSManagedObject bir alt sınıfı olan bir ... masa böyle görünüyor. Sürücü, Araba ve Parça tüm nesne ilişkileridir, isim ise sadece bir dizedir. Sürücü, Araba ve Parçaların hepsi, bu tabloda görüntülediğim bir ad özelliğine sahiptir. Bu metni masanın içine koymanın hızlı ve kirli bir yolunu istedim. Yani, ben bir örnek değişkeni olarak Uygulamadan başarılı başlamadan önce bu yerine belirli dize, sürücü, araba ve parça nesnelerin takibi için çalıştı

NSDictionary *parameterValues = [[NSDictionary alloc] initWithObjectsAndKeys: sessionName, [NSNumber numberWithInt: 0], sessionDriver, [NSNumber numberWithInt: 1], sessionCar, [NSNumber numberWithInt: 2], sessionTrack, [NSNumber numberWithInt: 3], nil]; 

NSString *parameterString; 
if([indexPath row] > 0) { 
    if([parameterValues objectForKey: [NSNumber numberWithInt: [indexPath row]]] == [NSNull null]) { 
     parameterString = [[NSString alloc] initWithFormat: @"Select a %@", [parameterNames objectAtIndex: [indexPath row]]]; 
    } else{ 
     parameterString = [[parameterValues objectForKey: [NSNumber numberWithInt: [indexPath row]]] name]; 
    } 
} else{ 
    parameterString = [parameterValues objectForKey: [NSNumber numberWithInt: 0]]; 
    if([parameterString isEqualToString: @""]) { 
     parameterString = @"Enter A Name"; 
    } 
} 

... böyle bir şey yapıyordu. [[Self session] sürücüsü], yeni bir oturum nesnesi geçildiğinde sıfırlanır, bir sözlük nesnesi kullanılamaz. Şimdi böyle yapıyorum ...

//these come in handy, they're the object names (We can use KVC), and we can use them in the table titles 
NSArray *parameterNames = [[NSArray alloc] initWithObjects: @"Name", @"Driver", @"Car", @"Track", nil]; 

//get the object for this row... (Name, Driver, Car, Track), and create a string to hold it's value.. 
id object = [session valueForKey: [parameterNames objectAtIndex: [indexPath row]]]; 
NSString *parameterValue; 

NSLog(@"%@", [session name]); 

//if this isn't the name row... 
if(object != nil) { 
    //if the indexPath is greater than 0, object is not name (NSString) 
    if([indexPath row] > 0) { 
     parameterValue = [object name]; 
    } else{ 
     parameterValue = object; 
    } 
} else{ 
    //object doesn't exist yet... placeholder! 
    parameterValue = [@"Select a " stringByAppendingString: (NSString *)[parameterNames objectAtIndex: [indexPath row]]]; 
} 

Sorduğum şey ... bunu yapıyorum?

sayesinde Mat - Bir Çekirdek Veri acemi:/

cevap

0

Bu düşünce bitti. Eğer bir oturum şöyle varlık varsa:

Session{ 
    name:string 
    driver<-->Driver 
    car<-->Car 
    track<-->Track 
} 

ve Sürücü, Araba ve tüm izleyin bir name özniteliği, o zaman yapmanız gereken tek şey şöyle nitelikler değer sormak sabit bir tablo olduğunu doldurmak için:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell 
             forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    cell=//... get cell however you do it 
    switch (indexPath.row) { 
     case 0: 
      cell.textLabel.text=self.currentSession.name 
      break; 
     case 1: 
      cell.textLabel.text=self.currentSession.driver.name; 
      break; 
     //... and so on 
     default: 
      break; 
    } 
    //... return the cell. 
} 

Benzer şekilde, nesnenin ayrıntı görünümüne geçmesini sağlamak için, yalnızca seçilen satırla ilişkili nesneyi almak için aynı anahtar deyimini kullanırsınız.

+0

Bunu yapıyordum, ama bir sebepten dolayı daha zarif bir çözüm arayışındaydım. Şimdi ona baktığım zaman, bu muhtemelen daha verimli bir yoldur ... - Sadece bu, anahtar ifadelerinin her birinde, nesnenin sıfır olup olmadığını kontrol etmem gerekiyor. , darmadağın. Hmm, tekrar bakmama izin ver .. - Teşekkürler: D –

+0

Nil ilişkisinden endişe ediyorsanız, en kolay çözüm, ilişkiyi gerekli yapmak ve ardından UI'de varlık varsayılan değerlerini göstermektir. Örneğin. Oturum gerekli bir sürücü ilişkisine sahiptir ve Sürücü öğesinin varsayılan adı "Yok". Böylelikle, istediğiniz davranışa ve kullanıcı arayüzüne sahip olursunuz. – TechZen

+0

Düşünüyorum da, deli olduğumu düşünmüştüm. - Teşekkürler: D –

İlgili konular