2011-12-29 1 views
4

최신 SDK, Xcode 4.2ARC을 사용하여 iOS 4 응용 프로그램을 개발하고 있습니다.알려진 셀렉터 인스턴스 메서드가 없습니다

나는 appDelegate.h

#import <UIKit/UIKit.h> 

@class ViewController; 
@class SecondViewController; 

@interface AppDelegate : UIResponder <UIApplicationDelegate> 
{ 
    UINavigationController* navController; 
    ViewController* viewController; 
    SecondViewController* secondViewController; 
} 

@property (strong, nonatomic) UIWindow *window; 

- (void) showSecondViewController; 

@end 

에 메서드를 추가 한 내가

- (IBAction)goSecondClicked:(id)sender 
{ 
    [[[UIApplication sharedApplication] delegate] showSecondViewController]; 
} 
ViewController.m

에 그 방법에 메시지를 보낼 때, appDelegate.m

#import "AppDelegate.h" 

#import "ViewController.h" 
#import "SecondViewController.h" 

@implementation AppDelegate 

@synthesize window = _window; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; 
    viewController.title = @"First"; 
    navController = [[UINavigationController alloc] initWithRootViewController:viewController]; 
    self.window.rootViewController = navController; 

    [self.window makeKeyAndVisible]; 
    return YES; 
} 

- (void)applicationWillResignActive:(UIApplication *)application 
{ 
    ... 
} 

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    ... 
} 

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
    ... 
} 

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    ... 
} 

- (void)applicationWillTerminate:(UIApplication *)application 
{ 
    ... 
} 

- (void) showSecondViewController 
{ 
    secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 
    secondViewController.title = @"Second"; 
    [navController pushViewController:secondViewController animated:YES]; 
} 

@end 

구현하지만 것

다음 컴파일러 오류가 발생합니다.

자동 참조 계산 문제 'showSecondViewController'

단서 선택에 대한 알려진 인스턴스 방법은?

답변

5

당신이로 얻을 위임 개체를 캐스팅해야합니다

- (IBAction)goSecondClicked:(id)sender 
{ 
    [[[UIApplication sharedApplication] delegate] performSelector:@selector(showSecondViewController)]; 
} 

편집 :

AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; 

그런 다음이에 goSecondClicked 행동 방식을 변경 appDelegate

3

에 메소드를 호출을 :이 대안은 주어진 상황에서 작동하지만 컴파일러는 메서드 이름을 변경하면 도움이되지 않는다는 점에 유의해야합니다 대리자에서 선택기 호출에서 이름을 변경하는 것을 잊지 마십시오. 따라서이 정보는 신중하게 사용해야합니다.

+0

은 정말 downvoters는 항상 이유를 설명달라고 ... 최선의 해결책은 아니지만 제 대답이 효과가 있습니다. –

1

당신은 또한 당신이 당신의 선택을 호출 할 수 있습니다, 그 후에 당신의 AppDelegate.h

#define APP_DELEGATE (AppDelegate *)[[UIApplication sharedApplication] delegate] 

에이 매크로를 정의 할 수 있습니다

[APP_DELEGATE showSecondViewController];