Сходить с ума с помощью UITextField Input в очень простом приложении - PullRequest
0 голосов
/ 10 августа 2011

У меня есть PromoCodeViewController, который запускается с использованием следующего кода:

@implementation Demo_WebServiceCallingUsingiOSAppDelegate

@synthesize window = _window,promoCodeController;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    self.promoCodeController = [[PromoCodeViewController alloc] init]; 

    [self.window addSubview:self.promoCodeController.view]; 

    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

PromoCodeViewController содержит UITextField, и я реализую UITextFieldDelegate для PromoCodeViewController, как показано:

@interface PromoCodeViewController : UIViewController<UITextFieldDelegate>

{
    IBOutlet UITextField *promoCodeTextField; 
}

@property (nonatomic,retain) IBOutlet UITextField *promoCodeTextField; 

@end
* 1006реализовать метод textFieldShouldReturn, как показано:
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    return TRUE; 
}

Я даже настроил PromoCodeViewController в качестве делегата для событий UITextField.Когда я начинаю печатать в TextBox, он выдает «Программа получила сигнал. EXC_BAD_ACCESS».Это происходит, когда я набираю второй символ в UITextField.Что я делаю не так?

ОБНОВЛЕНИЕ 1:

Ошибка появляется в следующем разделе:

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([Demo_WebServiceCallingUsingiOSAppDelegate class]));
    }
}

Ответы [ 2 ]

0 голосов
/ 10 августа 2011

Какой объект является делегатом текстового поля?Объекты обычно не сохраняют своих делегатов (поскольку делегат часто сохраняет ссылку на объект, а циклы сохранения приводят к утечкам памяти).

Я догадываюсь, что делегат вашего текстового поля определен и присоединен в вашемnib, но нигде не сохраняется, поэтому вскоре после загрузки nib делегат освобождается.Как только текстовое поле пытается что-то сделать с делегатом, происходит сбой.

Если это так, убедитесь, что что-то (обычно делегат приложения) сохраняет ссылку на любой объект, который служит делегатом вашего текста.поле.

0 голосов
/ 10 августа 2011

Похоже, что вы пропускаете оператор @synthesize для свойства promoCodeTextField. Добавьте следующее к вашему Demo_WebServiceCallingUsingiOSAppDelegate классу (который, кстати, может выиграть от переименования):

@synthesize promoCodeTextField = _promoCodeTextField;

Без оператора @synthesize редактор файлов пера Xcode напрямую установит переменную экземпляра вместо вызова методов доступа (так как они не существуют); как следствие, текстовое поле никогда не сохраняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...