Я переделываю свое приложение, чтобы использовать 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 очень недокументирован, и я не собираюсь давать быстрый ответ, но если у кого-то есть идея, пожалуйста, прокомментируйте или ответьте.