0

いくつかのイベントをテストするために基本的なiPhoneアプリに取り組んでいますが、理解できない、または答えを見つけることができないエラーが発生しています。私はIBをまったく使用していません(それが作成するMainWindow.xibを除いて)。

今のところ、それは可能な限り基本的なものです。

mainAppDelegate.h

#import <UIKit/UIKit.h>
#import "mainViewController.h"

@interface mainAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    mainViewController *viewController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) mainViewController *viewController;

@end

mainAppDelegate.m

#import "mainAppDelegate.h"

@implementation mainAppDelegate

@synthesize window;
@synthesize viewController;

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

    self.viewController = [[mainViewController alloc] init];
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];

    return YES;
}

- (void)dealloc {
    [viewController release];
    [window release];
    [super dealloc];
}

@end

mainViewController.h

#import <UIKit/UIKit.h>

@interface mainViewController : UIViewController {

}

- (void)showMenu;

@end

mainViewController.m

#import "mainViewController.h"

@implementation mainViewController

- (void)loadView {
    UIScrollView *mainView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
    mainView.scrollEnabled = YES;
    self.view = mainView;    
    self.view.backgroundColor = [UIColor grayColor];

    [self.view setUserInteractionEnabled:YES];
    [self.view addTarget:self action:@selector(showMenu) forControlEvents:UIControlEventTouchDown];

    [mainView release];
}

- (void)showMenu {
    NSLog(@"Show Menu");
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

- (void)viewDidUnload {
    [super viewDidUnload];
}

- (void)dealloc {
    [super dealloc];
}

@end

今、私はこの行に警告を受け取ります:

[self.view addTarget:self action:@selector(showMenu) forControlEvents:UIControlEventTouchDown];

つまり、「UIViewは「-addTarget:action:forControlEvents:」に応答しない可能性があります。UIViewサブクラスは確かにaddTargetに応答できるため、これは意味がありません。これはself.viewで呼び出しています。これは、loadViewが終了するまで解放しないため存在する必要があります。(それでも、コントローラーが保持する必要があります)

トレースを見ると、実際のエラーは-[UIScrollView addTarget:action:forControlEvents:]:認識されないセレクターがインスタンス0x5f11490に送信されたことがわかります。

セレクター自体に問題があるように見えますが、セレクターに問題はありません。

私はこれにかなり困惑していて、どんな助けでも素晴らしいでしょう。

4

2 に答える 2

3

まず、クラスは常に大文字で始まります。

UIScrollViewのサブクラスでありUIView、ではありませんUIControl

UIControlを実装しaddTarget:action:forControlEvents:ます。 UIScrollViewではない。したがって、ランタイムエラー。

スクロールビューで実行されたアクションに応答して何かを発生させたい場合は、スクロールビューのデリゲートを設定します。UIScrollViewDelegateのドキュメントを参照してください。

于 2010-07-22T16:04:21.457 に答える
0

この微妙な変化を試してください

[self.view addTarget:self action:@selector(showMenu:)
                               forControlEvents:UIControlEventTouchDown];

この

- (void)showMenu:(id) sender {
    NSLog(@"Show Menu");
}
于 2010-07-22T15:59:27.287 に答える