toSharedViewController不会重用现有的控制器

How*_*ard 8 iphone xcode objective-c three20 ios

我的URL地图如下:

[map from:@"tt://webPage/(initWithPage:)" toSharedViewController:[WebPageController class]];
Run Code Online (Sandbox Code Playgroud)

并在 WebPageController

- (id) initWithPage:(WebPage)page
{
    if (self = [super init])
    {
    ...
Run Code Online (Sandbox Code Playgroud)

然后我在我的代码中多次调用了url

tt://webPage/1
tt://webPage/2
tt://webPage/1 (still called the initWithPage: everytime, not cached)
Run Code Online (Sandbox Code Playgroud)

为什么它不是缓存,因为它是一个SharedViewController?

apo*_*rat 4

我相信您正在发生这种情况,因为TTNaviagtoriOS 5 上已损坏。请参阅https://github.com/facebook/ Three20/pull/719/files 。您是否尝试过在 iOS 4 上运行相同的代码并获得相同的结果?

我对您的建议是停止使用TTNaviagtorTTViewController您仍然可以通过本机 ios 方法中的推送和弹出来使用 Three20 库。

TTNaviagtor以下是替换应用程序委托中的的示例:

@interface AppDelegate : NSObject <UIApplicationDelegate> {

 UIWindow* _window;
 TTBaseNavigationController* _masterNavController;
 WebPageController* _web1Controller;
 WebPageController* _web2Controller;
}

@property(nonatomic, retain) UIWindow* window;
@property(nonatomic, retain) TTBaseNavigationController* masterNavController;
@property(nonatomic, retain) WebPageController* web1Controller;
@property(nonatomic, retain) WebPageController* web2Controller;
Run Code Online (Sandbox Code Playgroud)

///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
@implementation AppDelegate

@synthesize window = _window;

@synthesize masterNavController = _masterNavController;
@synthesize web1Controller = _web1Controller;
@synthesize web2Controller = web2Controller;

///////////////////////////////////////////////////////////////////////////////////////////////////
- (BOOL)application:(UIApplication *)application 
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

  _window = [[UIWindow alloc] initWithFrame:TTScreenBounds()];


    TTViewController* controller = [[[MasterViewController alloc] init] autorelease];
    _masterNavController = [[TTBaseNavigationController alloc] initWithRootViewController:controller];
    [_window addSubview:_masterNavController.view];    
  }

  [_window makeKeyAndVisible];

  return YES;
}
Run Code Online (Sandbox Code Playgroud)

TTViewController然后您可以将任何(或您自己的子类)推送和TTViewController弹出到_masterNavController. 就我个人而言,我认为 TTNavigator 是一个糟糕的设计模式,苹果以不同的思维方式设计了他们的导航系统。