«self.delegate = self» не работает на iOS с использованием ARC - PullRequest
2 голосов
/ 28 октября 2011

Я работаю над проектом iOS SDK 4 с включенной ARC.

Мой класс MyTextView (полученный из UITextView с протоколом UITextViewDelegate) реализует следующий статический метод:

+ (void)showInViewController:(UIViewController*)viewController
{
    MyTextView *textEdit = [[MyTextView alloc] init];
    textEdit.delegate = textEdit;
    [viewController.view addSubview:textEdit];

    // Show the keyboard
    [textEdit becomeFirstResponder];
}

В одном из моих контроллеров представления я вызываю следующее:

[MyTextView showInViewController:self]

Это происходит сбой при warning: Unable to restore previously selected frame. на becomeFirstResponder.Выглядит как сбой, связанный со стеком из-за некоторого цикла.Я довольно новичок в ARC.Свойство делегата UITextView определяется как assign (ARC не должен интерпретировать это как weak?).Я знаю, что этот подход довольно странный с точки зрения памяти.Тем не менее, я хотел знать, может ли ARC справиться с такими вещами.Очевидно, что не может.Есть идеи, в чем может быть проблема и как ее решить?

Ответы [ 2 ]

1 голос
/ 31 июля 2012

Я не думаю, что это имеет какое-либо отношение к ARC и управлению памятью, но просто более фундаментальная проблема, что UITextView не может быть делегатом сам по себе.Это заперто в петле.Поместите сообщение регистрации в textViewDidChangeSelection, и вы увидите, что оно неоднократно вызывается.Не проблема с памятью, а скорее проблема логики с UITextView делегатами.Даже если вы не выполняете проблемный showInViewController, а просто создаете стандартный подкласс UITextView и пытаетесь установить его делегат себе, вы увидите то же самое любопытное поведение.

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