2012-12-15 12 views
6

Ustawiłem navController, który pojawia się po naciśnięciu przycisku. Jednakże, jeśli dotknę przycisku, pojawia się błąd: "Warning: Attempt to present <UINavigationController>: 0xab5d9d0 on <MyApp: 0xadaa320> whose view is not in the window hierarchy!"Którego widoku nie ma w hierarchii okiennej

Czy ktoś wie, jak rozwiązać ten problem? Próbowałem też czegoś na Stackoverflow, ale to nie było moje rozwiązanie.

Oto mój kod do otwierania navigationcontroller:

Nie wiem, czy ktoś wie to album zdjęć, ale jeśli nie, here jest projekt.

Mój kod (MyApp.m):

#import MyApp.h 
... 
//some stuff 
- (void)launchGalleryView 
{ 



    MWPhotoBrowser *browser = [[MWPhotoBrowser alloc] initWithDelegate:self]; 

    // Set browser options. 
    browser.wantsFullScreenLayout = YES; 
    browser.displayActionButton = NO; 


    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:browser]; 

    NSMutableArray *photos = [[NSMutableArray alloc] init]; 
    MWPhoto *photo; 
    photo = [MWPhoto photoWithFilePath:[[NSBundle mainBundle] pathForResource:@"callculator" ofType:@"jpg"]]; 
    photo.caption = @"The calculator is soo beateful..."; 
    [photos addObject:photo]; 

    self.photos = photos; 

    [self presentModalViewController:navController animated:NO]; 
} 

góry dzięki.

Edit:

jest w Recources i w źródłach kompilacji ale w zasobach widać, że jest czerwony (storyboard). Może to spowodowane?

drugiego kontrolera .h:

@class MyApp; 

@interface Second : UIViewController <MWPhotoBrowserDelegate> { 

} 



@property (nonatomic, retain) MyApp* vC; 

@end 

Secnond kontroler .m:

#import "Second.h" 
#import "MyApp.h" 


@interface Second() 

@end 

@implementation Second 

@synthesize vC; 
    //some stuff in here 


//the action 
    - (IBAction)dothis:(id)sender { 

     NSLog(@"launch the navcontroller"); 


     [self.vC launchGalleryView]; 

    } 

MyApp.h:

#import "Second.h" 


@interface myApp : UIViewController <MWPhotoBrowserDelegate> { 
    } 

-(void)launchGalleryView; 

NSArray *_photos; 

enter image description here

NOWA EDYCJA:

odkryłem, że mam do wywołania metody „launchGalleryView” w viewDidAppear ale w jaki sposób mogę to zrobić bez wywoływania navcontroller każdym widoku obciążenia? Czy ktoś wie, jak to zrobić?

+0

otrzymuję ten błąd, gdy próbuję przedstawić controlle r od kontrolera, który w tej chwili nie jest najwyższy. Upewnij się, że jest najwyższym i nie przedstawia nic innego! – yuf

+0

jak mogę to zrobić? – MasterRazer

+0

Co jeśli zadzwonisz pod następujący adres: [self dismissViewControllerAnimated: NO complete: nil]; przed presentModalViewController? Co się dzieje? – yuf

Odpowiedz

25

Sprawdziłem swój projekt .. nie był w stanie rozwiązać problem prawidłowego ..

ale próbowałem hack i to działało ..

zastąpić tę linię z

[self presentModalViewController:navController animated:YES]; 

ten

[[[[[UIApplication sharedApplication] delegate] window] rootViewController] presentModalViewController:navController animated:YES]; 
+1

dziękuję: D;) – MasterRazer

+0

presentModalViewController jest przestarzałe na iOS 6.x, czy masz inne rozwiązanie? –

+0

http://stackoverflow.com/questions/12507455/a-lot-of-ctions-are-deprecated-ios-6 – Shubhank

Powiązane problemy