Итак, у меня есть объект данных Core, давайте назовем его сеансом (хорошо, именно так он и называется), и у него есть четыре атрибута (Имя, Драйвер, Трек и Автомобиль), которые я хотел бы показать в табличное представление. Раньше у меня это работало, но, увы, я пытаюсь сделать свои контроллеры представления немного более универсальными и многократно используемыми, поэтому я немного изменяю их. Вот как выглядит стол ...
![alt text](https://i.stack.imgur.com/W1u7w.png)
В контроллере представления передается Сессия, которая является подклассом NSManagedObject, который CoreData вызвала для меня. Driver, Car и Track - все объектные отношения, а name - просто строка. Driver, Car и Track имеют атрибут name, который я отображаю в этой таблице. Я хотел быстрый и грязный способ отображения этого текста в таблице. Итак, я делал что-то вроде ...
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";
}
}
Это работало до того, как я начал передавать сеанс в качестве переменной экземпляра, вместо того, чтобы отслеживать конкретные объекты строки, драйвера, автомобиля и трека. Так как [[self session] driver] вернет nil при передаче нового объекта сеанса, объект словаря не может быть использован. Вот как я это делаю сейчас ...
//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]]];
}
То, что я спрашиваю, это ... я делаю это правильно?
Спасибо,
Мэтт - новичок в Core Data: /