toShanetworkingViewController no vuelve a usar el controller existente

Mi map de URL es el siguiente:

[map from:@"tt://webPage/(initWithPage:)" toShanetworkingViewController:[WebPageController class]]; 

y en el WebPageController

 - (id) initWithPage:(WebPage)page { if (self = [super init]) { ... 

Luego llamé a la url varias veces en mi código

 tt://webPage/1 tt://webPage/2 tt://webPage/1 (still called the initWithPage: everytime, not cached) 

¿Por qué no se almacena en caching porque es un ShanetworkingViewController?

Creo que esto te está sucediendo porque TTNaviagtor está roto en iOS 5. TTNaviagtor https://github.com/facebook/three20/pull/719/files . ¿Has intentado ejecutar el mismo código en iOS 4 con el mismo resultado?

Mi recomendación para usted es dejar de usar TTNaviagtor . Todavía puede usar la biblioteca three20 presionando y TTViewController en el método ios nativo.

Aquí hay un ejemplo sobre TTNaviagtor replace el TTNaviagtor en su delegado de la aplicación:

 @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; 

Y

 /////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////// @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; } 

entonces puede presionar y TTViewController cualquier TTViewController (o sus propias subclasss de TTViewController ) en _masterNavController . Personalmente, creo que TTNavigator es un patrón de layout malo, y Apple diseñó su sistema de navigation en diferentes modos de pensar.

¿Por qué no entras en el código y verificas qué sucede?

Creo que los objects se crean en TTURLMap objectForURL:query:pattern: puede establecer un punto de interrupción y ver por qué se crea uno nuevo, en lugar de reutilizar uno antiguo.

esta la implementación de objectForURL:query:pattern: con mi comentario

 - (id)objectForURL: (NSString*)URL query: (NSDictionary*)query pattern: (TTURLNavigatorPattern**)outPattern { id object = nil; if (_objectMappings) { // _objectMappings is a NSMutableDictionary and use to cache shanetworking object object = [_objectMappings objectForKey:URL]; // if object not found than check does _objectMappings contains it with right key if (object && !outPattern) { return object; } } NSURL* theURL = [NSURL URLWithString:URL]; TTURLNavigatorPattern* pattern = [self matchObjectPattern:theURL]; if (pattern) { if (!object) { // object is not found in the mapping dictionary so create new one, this should only happen once for shanetworking object object = [pattern createObjectFromURL:theURL query:query]; } // make sure navigationMode is TTNavigationModeShare if (pattern.navigationMode == TTNavigationModeShare && object) { // cache shanetworking object in the mapping dictionary so next time it will re-use the cached one [self setObject:object forURL:URL]; // if setObject:forURL: is not working than the shanetworking object will not be cached } if (outPattern) { *outPattern = pattern; } return object; } else { return nil; } }