2014-09-16 1 views
-1

У меня есть этот код, который создает 40 UITextFields в UIPopover; когда я пытаюсь поставить номер в одном из TextFields, то приложение падает с этим:ОБНОВЛЕНО # 2 - приложение сбой, потому что метод освобождается

- [ImportTABDelimitedFile respondsToSelector]: сообщение, отправленное высвобождены например

Это код, чтобы создать текстовые поля:

// create the uitextfields for user to match against their input file columns 
CGRect nbrFieldRect = CGRectMake(x-20, y, 26.0f, 26.0f); 
UITextField *nbrTextField = [[UITextField alloc] initWithFrame:nbrFieldRect]; 
if(colorYES) 
    nbrTextField.backgroundColor = UIColorFromRGB(0xFFF9AF); 
else 
    nbrTextField.backgroundColor = [UIColor whiteColor]; 

nbrTextField.enabled = YES; 
[nbrTextField setKeyboardType:UIKeyboardTypeNumberPad]; 
nbrTextField.textColor = [UIColor blackColor]; 
nbrTextField.tag = tagNumber + 100; // range: 170-215 
nbrTextField.font = [UIFont systemFontOfSize:12.0f]; 
nbrTextField.borderStyle = UITextBorderStyleRoundedRect; 
nbrTextField.returnKeyType = UIReturnKeyNext; 
nbrTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; 
[nbrTextField addTarget:self action:@selector(mapUserFields) forControlEvents: UIControlEventEditingDidEnd]; 
nbrTextField.delegate = self; 
[theView addSubview:nbrTextField]; 

И это код mapUserFields:

-(void)mapUserFields { 

    NSLog(@"mapUserFields: textFieldDidEndEditing"); 
} 

ОБНОВЛЕНИЕ # 2 Я побежал инструменты, и это показывает, что метод высвобождены в настоящее время, что является причиной аварии; это изображение выхода инструменты: enter image description here

Теперь вопрос: почему метод быть высвобождены, и как это исправить?

+0

Пустой текстField.delegate не может вызвать сбой. Ваша проблема в другом месте. – Avt

+0

что заставляет вас думать, что это ошибка делегата? У меня такое ощущение, что 40 выпущенных объектов uitextfields связаны с этим. – meda

+0

@meda: они добавлены в представление, там, где они не выпущены. по крайней мере, не из кода, который мы видим здесь. – vikingosegundo

ответ

0

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

Это делается в файле заголовок (заголовочный)

Кроме того, при создании 40-нечетных текстовых полей, установка:

nbrTextField.delegate = self; 

будет иметь текущий акт класса в качестве делегата для UITextFields.

Надеется, что это помогает

1

Вы добавляете делегат при создании текстового поля и настроек другие его свойств, например:

UITextField *nbrTextField = [[UITextField alloc] initWithFrame:nbrFieldRect]; 
nbrTextField.delegate = self; 

и реализовать его метод делегата, который вызывается, когда вы нажимаете клавишу ввода с клавиатуры:

- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
    [textField resignFirstResponder]; 
    return YES; 
} 

Вышеупомянутый код, который вы опубликовали, выглядит до сих пор, пока вы не опубликовали журналы аварий.

EDIT: Журналы аварии вы Отправленные предложить объект (ImportTABDelimitedFile в данном случае), который добавляется в качестве наблюдателя для UIControlEventEditingDidEnd случае текстового поля быть высвобождены.

Можете ли вы убедиться в том, что вы сохраняете popover в своем классе представления, создавая свойство с типом сохранения и когда вы отклоняете набор свойств nil переменной popover. Например, например:

@property (nonatomic, retain) UIPopoverController *popoverController; 

и не забудьте инициализировать и назначить это свойство, когда вы представляете popover.Установите его делегат на себя, как это:

popoverController.delegate = self; 

Не забудьте реализовать делегат и в методе делегата, не очистить переменное свойство, как это:

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController{ 
    self.popoverController = nil; //if you are using non-arc, release it. 
} 
+0

и какой селектор отправлен? – vikingosegundo

+0

Посмотрите на код ... * mapUserFields * – SpokaneDude

+0

@ spokane-dude см. Мой отредактированный ответ на основе журнала сбоев, который вы предоставили. –

0

Я нашел эту проблему (с помощь Майкла Dautermann) ... Я должен был сделать так называемый метод свойства, как:

iTABFile = [[ImportTABDelimitedFile alloc]init]; 

Теперь, это не выпустили, и работает как чемпион! Спасибо всем за вашу помощь; Я очень ценю это. SD