Невозможно установить свойство для DetailViewController в приложении iPad - PullRequest
1 голос
/ 01 марта 2011

РЕДАКТИРОВАТЬ: понял это. Я смог получить доступ к свойству через экземпляр appDelegate с appDelegate.detailViewController.thisRequest = aRequest;

Я портирую довольно простое приложение для iPhone с навигацией в приложение Split View для iPad. У меня есть два вложенных уровня навигации в главном представлении. Пользователь выбирает значение из первой таблицы и загружает 2-ую таблицу. Выбор значения во второй таблице загружает элемент Detail для подробного представления. Или это должно быть. Это позволяет мне установить свойство в DetailViewController без ошибки, но, похоже, на самом деле его не устанавливают. Это просто ноль.

Я довольно близко следую шаблону SplitView. Я действительно только схожу с проторенной дорожки, добавив второй 2nd TableViewController. Мой RootViewController загружает 2-й TableViewController на didSelectRowAtIndexPath, и эта часть работает. В моем втором TableViewController.m я пытаюсь установить элемент детализации для DetailView. В didSelectRowAtIndexPath я могу получить объект для моей детали, но когда я его устанавливаю, он не устанавливается.

Вот код:

Во-первых, в своем DetailViewController я установил свойство для объекта, который будет заполнять мои поля (* thisRequest):

DetailViewController.h:

@interface DetailViewController : UIViewController <UIPopoverControllerDelegate, UISplitViewControllerDelegate> {

UIPopoverController *popoverController;
UIToolbar *toolbar;

Request *thisRequest;
}

DetailViewController.m:

@interface DetailViewController ()
@property (nonatomic, retain) UIPopoverController *popoverController;
- (void)configureView;
@end

@implementation DetailViewController

@synthesize toolbar, popoverController, detailItem, detailDescriptionLabel;
@synthesize thisRequest;

Затем в моем втором TableViewController я пытаюсь сохранить ссылку на DetailViewController (я подозреваю, что это то, где я ошибаюсь; я до сих пор не до конца понимаю, как все сохраняется и как именно ссылаться на них в этой структуре ).

RequestsTableViewController.h:

@class TrackerSplitViewAppDelegate, RequestsTableViewController,  DetailViewController;

@interface RequestsTableViewController : UITableViewController {
    NSString* selectedDepartmentID;
    NSMutableArray *requests;
    DetailViewController *detailViewController;
}

@property (nonatomic, retain) NSString* selectedDepartmentID;
@property (retain, nonatomic) NSMutableArray *requests;
@property (nonatomic, retain) IBOutlet DetailViewController *detailViewController;

RequestsTableViewController.m:

@implementation RequestsTableViewController

@synthesize selectedDepartmentID;
@synthesize requests;
@synthesize detailViewController;

<snip>
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    TrackerSplitViewAppDelegate *appDelegate = (TrackerSplitViewAppDelegate *)[[UIApplication sharedApplication] delegate];

    Request *aRequest = [appDelegate.requests objectAtIndex:indexPath.row];
    detailViewController.thisRequest = aRequest;    
    NSLog(@"Request Loaded: %@", aRequest.Title);
    NSLog(@"detailViewController.thisRequest: %@", detailViewController.thisRequest.Title);
    [appDelegate release];

}

Объект aRequest загружается просто отлично, а detailViewController.thisRequest = aRequest; строка работает без ошибок, но мой вывод журнала выглядит так:

2011-03-01 10: 07: 22.584 TrackerSplitView [8162: 40b] Запрос загружен: MyTitleString 2011-03-01 10: 07: 22.585 TrackerSplitView [8162: 40b] detailViewController.thisRequest: (null)

Как я уже сказал, я до сих пор не до конца понимаю, как все проходит в платформе iOS, но шаблон SplitNavigation делает что-то почти идентичное этому со значением id и работает нормально. Единственные различия, которые я вижу, это то, что навигационный слой не является вложенным, как у меня, а также они не используют указатель для идентификатора, так как это целое число вместо пользовательского объекта.
Я предполагаю, что не передаю detailViewController в свой RequestTableViewController должным образом, но я не вижу, как это сделать.

1 Ответ

0 голосов
/ 01 марта 2011

РЕДАКТИРОВАТЬ: понял это.Я смог получить доступ к свойству через экземпляр appDelegate с appDelegate.detailViewController.thisRequest = aRequest;

В следующем сообщении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...