В моем бесконечном квесте поделиться выделением строки таблицы для нескольких представлений, загруженных в модальном представлении, я рассмотрел одну проблему. Я использую пример кода Apples DrillDownSave в качестве модели, чтобы воссоздать эту магию. И думаю, что я все настроил точно так же ...
В разделе didSelectRowAtIndexPath моего RootViewController.m у меня есть следующий код для копирования violinMakers MSMutableArray в подробный вид MSMuteableArray с тем же именем. Все цветовое кодирование и отсутствие ошибок говорит мне, что я на правильном пути .. но ..
detailsView.violinMakers = [violinMakers objectAtIndex:indexPath.row];
в файле RootviewController.h Я ссылаюсь на DetailsViewController через:
@class DetailViewController
DetailsViewController *detailsView;
NSMutableArray *violinMakers;
@property (nonatomic, retain) NSMutableArray *violinMakers;
Затем в файле DetailsViewController .h:
NSMutableArray *violinMakers;
IBOutlet UITextView *violinMakerDescription;
@property (nonatomic, retain) NSMutableArray *violinMakers; //tried assign or copy no difference
@property (nonatomic, retain) IBOutlet UITextView *violinMakerDescription;
А в файле DetailsViewController .m:
- (void)viewWillAppear:(BOOL)animated
ViolinMaker *violinMaker = (ViolinMaker *)violinMakers;
[violinMakerDescription setText: [violinMaker description]];
NSLog(@"violinMakerDescription in detailsView: %@", [violinMaker description]);
У меня есть отдельный класс, как видно выше, который я использую для определения данных violinMaker. Это прекрасно работает в контроллере rootview внутри didSelectRowAtIndexPath, поэтому я знаю, что это не является частью проблемы, я, конечно, ссылаюсь на это в файле .m.
Все это подключается в IB как обычно, так как я проверяю, что он работает, просто выталкивая DetailsViewController напрямую из rootViewController, и данные прекрасно загружаются в UITextView.
Я запускаю DetailsViewController из push-представления (работает отлично) из RootviewController (tableViewColler), и он запускается как модальное представление:
DetailsViewController *detailsViewController = [[DetailsViewController alloc] initWithNibName:@"DetailsViewController" bundle:nil ];
UINavigationController *aDetailsViewController = [[UINavigationController alloc] initWithRootViewController:detailsViewController];
[self presentModalViewController:aDetailsViewController animated:YES];
// [violinMakerView release];
[DetailsViewController retain]; // or release no different
[aDetailsViewController release];
Я не получаю ошибок при сборке и просмотре загрузок, но информация в textView пуста. Это также говорит мне, что он ничего не загружает и подключен правильно ... Я так близко ... Но я могу видеть из моего NSLog, что это значение:
violinMakerDescription in detailsView: (null)
так что violinMaker из RootviewController не копируется в массив violinMakers в DetailsViewController. Мне неприятно это признавать, но в течение нескольких недель я пробовал различные решения, чтобы заставить это работать, хотя appDelegate, через NSDictionary и все другие способы безрезультатно. Я думаю, что ответ заключается в выпуске violinMaker, поэтому просто ничего не передается или строка назначения в RootViewController не работает. Кто-нибудь знает, что я могу изменить?
Я действительно был бы признателен за некоторую помощь, я просто не понимаю, чего мне не хватает, но это самое близкое, что я получил, мне просто нужна правильная ссылка или я вижу, почему значения не сохраняются. Если есть способ проверить, когда значения выпущены, я мог бы проверить эту проблему, может быть, это так. Я пытался сохранить его везде (и исправить после того, как я заставил его работать), но он просто не работает ... помогите ??
Спасибо всем !!!
С уважением, Кирк
Попытался изменить строку загрузки в RootViewController на:
[detailsView.violinMakers addObject: [violinMakers objectAtIndex:indexPath.row]];
@ Frank
Во-первых, спасибо за вашу помощь в этом !!
Я устанавливаю объект violinMaker в rootViewController таким же образом, и он там работает нормально, как показано ниже:
violinMaker = [self.violinMakers objectAtIndex:indexPath.row];
ViolinMakerViewController *violinMakerViewController = [[ViolinMakerViewController alloc] initWithNibName:@"ViolinMakerViewController" bundle:nil];
self.violinMakerView = violinMakerViewController;
[[self navigationController] pushViewController:violinMakerView animated:YES];
[self.violinMakerView.violinMakerName setText:[violinMaker name]];
....
[self.violinMakerView.violinMakerDescription setText:[violinMaker description]];
NSLog(@"violinMaker description variable in RootView: %@", [violinMaker description]);
DetailsViewController.violinMakers = [violinMakers objectAtIndex:indexPath.row];
Здесь я вижу, что в NSLog он прекрасно загружается, поэтому я полагал, что загрузка его здесь в массив из objectAtIndex: indexPath.row с последующим копированием этого массива и помещением его в объект ViolinMaker из DetaisViewController будет работать. Я не хотел заново создавать объект ViolinMaker внутри DetailsViewController, просто перезагрузить его из массива, как это было из RootViewController.
Вот как это делает пример DrillDownSave Apple, и я отразил эту конфигурацию. Где в level1ViewController в didSelectRowAtIndex следующий код
// provide the 2nd level its content
level2ViewController.listContent = [[listContent objectAtIndex:indexPath.row] objectForKey:kChildrenKey];
Мне не нужна ключевая часть, так как она предназначена для вызова местоположения. Оба контроллера в этом примере кода используют NSArrays с одинаковыми именами, и он, похоже, копирует массив L1 в массив L2 через эту строку.
Они используют проталкиваемые TableViews, что упростит, но я не просто делаю это, IBOutlets для загрузки информации в UITextView, поэтому я должен выполнить присвоение массива в контроллере RootView, где происходит выбор.Если бы я мог просто сохранить ViolinMaker, назначенный в контроллере RootView, я мог бы тогда просто взять его в Подробности, но я не могу понять это тоже ....
Спасибо за помощь, я действительно застрял ..