ViewController クラスに UITextFieldDelegate を実装すると、テキスト フィールドに最初の文字を入力すると、次のエラーがスローされます。
-[MyViewController respondsToSelector:]: message sent to deallocated instance...
ということで、別クラス(NSObjectのみ継承)を作ってUITextFieldDelegateを実装してみました。何を推測すると、それは完全に機能しました。ただし、回避したい多くの醜いクラス間コミュニケーションを行わなければならないため、他の問題がいくつか発生します。私のアプリデリゲートコードの関連部分は次のとおりです。
@interface RMSAppDelegate : NSObject <UIApplicationDelegate,
UITabBarControllerDelegate>
@property (nonatomic, retain) UIViewController* myViewController;
@end
@implementation MyAppDelegate
@synthesize myViewController;
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
myViewController = [[MyViewController alloc]
initWithNibName:@"MyView" bundle:nil];
[self.window setRootViewController:myViewController];
[self.window makeKeyAndVisible];
return YES;
}
@end
..そして、ここに表示されているものがあります:
@interface MyViewController : UIViewController <UITextFieldDelegate>
@property (nonatomic, retain) IBOutlet UITextField* pinTextField;
- (void)viewDidLoad;
@end
@implementation MyViewController
@synthesize pinTextField;
- (void)viewDidLoad {
// DOES NOT WORK (WHY?)
//[pinTextField setDelegate:self];
// WORKS, BUT I'D LIKE TO AVOID
[pinTextField setDelegate:[[[MyTextFieldDelegate alloc] init] autorelease];
[pinTextField becomeFirstResponder];
[super viewDidLoad];
}
@end
そして、私がもっとうまくやれるコード (トピックから外れていても) を見つけたら、コメントを残してください。