2012-02-12 8 views
8

मेरे यूआरएल मानचित्र इस प्रकार है:toSharedViewController फिर से उपयोग करते हुए मौजूदा नियंत्रक नहीं

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

और WebPageController

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

तब में मैं अपने कोड में यूआरएल कई बार कहा जाता

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

कैश नहीं किया गया है क्योंकि यह एक साझा दृश्य नियंत्रक है?

+0

साथ objectForURL:query:pattern: के कार्यान्वयन है क्या 'को typedefed WebPage'? – tonklon

+0

@tonklon, यह सिर्फ एक यादृच्छिक ENUM – Howard

+0

है? ........... – HelmiB

उत्तर

4

मुझे विश्वास है कि यह आपके साथ हो रहा है क्योंकि TTNaviagtor आईओएस 5 पर टूट गया है। https://github.com/facebook/three20/pull/719/files देखें। क्या आपने एक ही परिणाम के साथ आईओएस 4 पर एक ही कोड चलाने की कोशिश की है?

मेरी सिफारिश आपको TTNaviagtor का उपयोग करना बंद करना है। आप मूल आईओएस विधि में TTViewController को दबाकर और पॉप करके तीन20 लाइब्रेरी का उपयोग कर सकते हैं।

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

और

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

तो आप धक्का और _masterNavController में किसी भी TTViewController (या TTViewController की अपनी खुद की उपवर्ग) पॉप कर सकते हैं:

अपने ऐप प्रतिनिधि में TTNaviagtor की जगह पर एक उदाहरण है । व्यक्तिगत रूप से, मुझे लगता है कि टीटीएनविगेटर एक खराब डिजाइन पैटर्न है, और सेब ने विभिन्न नेविगेशन सिस्टम में अपनी नेविगेशन प्रणाली तैयार की है।

0

कोड में कदम क्यों नहीं उठाएं और जांचें कि क्या होता है?

मेरा मानना ​​है कि ऑब्जेक्ट्स TTURLMap के objectForURL:query:pattern: में बनाए गए हैं, आप ब्रेक पॉइंट सेट कर सकते हैं और देख सकते हैं कि एक नया क्यों बनाया गया है, बजाय पुराने का उपयोग करें।

इस

मेरी टिप्पणी

- (id)objectForURL: (NSString*)URL 
      query: (NSDictionary*)query 
      pattern: (TTURLNavigatorPattern**)outPattern { 
    id object = nil; 
    if (_objectMappings) { 
    // _objectMappings is a NSMutableDictionary and use to cache shared 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 shared object 
     object = [pattern createObjectFromURL:theURL query:query]; 
    } 
    // make sure navigationMode is TTNavigationModeShare 
    if (pattern.navigationMode == TTNavigationModeShare && object) { 
     // cache shared 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 shared object will not be cached 
    } 
    if (outPattern) { 
     *outPattern = pattern; 
    } 
    return object; 

    } else { 
    return nil; 
    } 
} 
संबंधित मुद्दे