Three20 Navigation: Показать не показывать - PullRequest
0 голосов
/ 21 августа 2011

Я переделываю свое приложение, чтобы использовать Three20, и теперь я хочу использовать навигацию Three20.

Вот мой код, который отлично работает раньше:

ENSListViewController *vc = [ENSListViewController alloc];
NSArray *ensArray;
NSDictionary *dic;
NSInteger folder_id;
NSString* folder_type;
NSString* barTitle;
NSString* folderName;

if (indexPath.section == 0)
{
    ensArray = [ensFolderList objectForKey:@"an"];
    dic = [ensArray objectAtIndex:indexPath.row];
    folder_type = @"an";
    barTitle = [NSString stringWithFormat:@"%@", [dic objectForKey:@"name"]];
    folder_id = [[dic objectForKey:@"ordner_id"] intValue];
    folderName = [dic objectForKey:@"name"];
}
else
{
    ensArray = [ensFolderList objectForKey:@"von"];
    dic = [ensArray objectAtIndex:indexPath.row];
    folder_type = @"von";
    barTitle = [NSString stringWithFormat:@"%@", [dic objectForKey:@"name"]];
    folder_id = [[dic objectForKey:@"ordner_id"] intValue];                                                                           
    folderName = [dic objectForKey:@"name"];
}

vc.folder_id = folder_id;
vc.folder_type = folder_type;
vc.barTitle = barTitle;
vc.folderName = folderName;
[vc initWithNibName:@"ENSListViewController" bundle:nil];
[self.view addSubview:vc.view];

Работает отлично. Он выделяет ViewController, устанавливает много данных в ViewController (Properties) и затем показывает представление.

Вот мой код:

  NSArray *ensArray;
NSDictionary *dic;
NSInteger folder_id;
NSString* folder_type;
NSString* barTitle;
NSString* folderName;

if (indexPath.section == 0)
{
    ensArray = [ensFolderList objectForKey:@"an"];
    dic = [ensArray objectAtIndex:indexPath.row];
    folder_type = @"an";
    barTitle = [NSString stringWithFormat:@"%@", [dic objectForKey:@"name"]];
    folder_id = [[dic objectForKey:@"ordner_id"] intValue];
    folderName = [dic objectForKey:@"name"];
}
else
{
    ensArray = [ensFolderList objectForKey:@"von"];
    dic = [ensArray objectAtIndex:indexPath.row];
    folder_type = @"von";
    barTitle = [NSString stringWithFormat:@"%@", [dic objectForKey:@"name"]];
    folder_id = [[dic objectForKey:@"ordner_id"] intValue];                                                                           
    folderName = [dic objectForKey:@"name"];
}


/*
vc.folder_id = folder_id;
vc.folder_type = folder_type;
vc.barTitle = barTitle;
vc.folderName = folderName;
[vc initWithNibName:@"ENSListViewController" bundle:nil];
//[self.view addSubview:vc.view];
 */
NSString *url = [NSString stringWithFormat:@"tt://ensList/%@/%@/%d/%@/%@/%@", @"ENSListViewController", nil, folder_id, folder_type, barTitle, folderName];
TTURLAction *action = [TTURLAction actionWithURLPath:url];
[[TTNavigator navigator] openURLAction:action];

Вот мой навигатор:

navigator = [TTNavigator navigator]; // create the navigator
navigator.persistenceMode = TTNavigatorPersistenceModeAll; // and he will save the data :)

TTURLMap* map = navigator.URLMap; 

[map            from: @"tt://ens"
    toSharedViewController: [ENSOverviewViewController class]];

[map from: @"tt://ensList/(initWithNibName:)/(bundle:)/(folderId:)/(folderType:)/(barTitle:)/(folderName:)" toViewController:[ENSListViewController class]

переход: 3];

А вот мой новый метод конструктора:

 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        [self LoadENSList];
    }
    return self;
}

- (void) initWithNibName:(NSString*)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil folderId:(NSInteger)folder_id2 folderType:(NSString*)folder_type2 barTitle:(NSString*)barTitle2 folderName:(NSString*)folderName2
{
    self.folder_id = folder_id2;
    self.folder_type = folder_type2;
    self.barTitle = barTitle2;
    self.folderName = folderName2;
    [self initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

}

Итак, если вы прочитали это здесь, большое спасибо!

Теперь моя проблема: вид не открывается. Ничего не произошло. Я думаю, что есть ошибка в моем собственном конструкторе, порядок вызова моего конструктора или что-то в этом роде. Я нахожусь на нем с 2 часов, но не могу найти ошибку.

Я знаю, что Three20 очень недокументирован, и я не собираюсь давать быстрый ответ, но если у кого-то есть идея, пожалуйста, прокомментируйте или ответьте.

1 Ответ

0 голосов
/ 22 августа 2011

Нашли решение:

1) Я забыл возвращаемое значение в моем конструкторе. После добавления этого (изменение (void) на (id) и добавление «return self») оно продолжается ...

2) После того, как он изменился в 1), система падает, потому что initWithNibName выдает ошибку NSInvalidArgument. После изменения этого значения на init оно отлично работает

...