2013-04-12 1 views
0

я инициализировать мой пользовательский вид с моим пользовательским методом:Возвращения «я» в то время как он не установлен в результате «[(супер или самостоятельно) инициализации ...]» в моем пользовательском методе Alloc

1) In My View Controller Я зову пользовательский вид и передать этот массив в мой пользовательский класс, который имеет тип UIView

NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"CustomViewiPhoneLayout" owner:self options:nil]; 

customViewObject = [[CustomView alloc] initWithArray:array]; 

[ParentLayout addSubview:customViewObject]; 

2) настраиваемое представление.

-(id)initWithArray:(NSArray*)array { 
     self = [array objectAtIndex:0]; // passing view as self; here it shows leak. 
     if(self) {} 
     return self; 
    } 

Это дает мне возможность утечки по имени Returning 'self' while it is not set to the result of '[(super or self) init...]'

+0

Я не уверен, что ваш код имеет смысл. Что ты пытаешься сделать? –

+0

То, что я пытаюсь сделать, это то, что я передаю мгновение, которое создается в родительском как я, поэтому все действия будут автоматически вызывать методы пользовательского класса – KDeogharkar

+0

для ex. Если я нажму кнопку subview, динамически добавленную в родительском, он вызовет связанный метод пользовательского класса вида, потому что он имеет ссылку на пользовательский момент – KDeogharkar

ответ

-1

Компилятор жалуется, потому что вы используете функцию init без использования одной из суперфункций. Хотя это может иметь логический смысл, это технически неправильное использование функции init, и поэтому компилятор жалуется. Это не всегда будет проблемой (у меня был код, который только дал мне предупреждение, прежде чем я его исправил), но это хорошая практика, чтобы не работать таким образом. В этом случае это неправильное использование функции init. Я хотел бы написать еще одну функцию:

+(customViewObject *)createWithArray:(NSArray *)array{ 
    customViewObject *returnObject = [array objectAtIndex:0]; 
    return returnObject; 
} 

Однако, глядя на первый бит кода, я не вижу никакой необходимости иметь функцию такого рода в классе customViewObject. Я рекомендовал бы просто сделать это:

NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"CustomViewiPhoneLayout" owner:self options:nil]; 

customViewObject = [array objectAtIndex:0]; 

[ParentLayout addSubview:customViewObject]; 
+2

Массив переменных - это переменная параметра (и, следовательно, локальная переменная), это не переменная экземпляра.Хотя метод (а не функция, что-то другое) не имеет смысла, нет ничего неправильного * per se * с использованием массива; и сообщение об ошибке не связано с массивом. – CRD

+0

Я неправильно читаю код о переменной экземпляра; Спасибо. Я поправлю свой ответ. – WolfLink

2

Наверняка вам не нужно это, насколько:

NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"CustomViewiPhoneLayout" owner:self options:nil]; 

customViewObject = [array objectAtIndex:0]; 

В своем коде вы Alloc вид и сними его назначения самостоятельно ,

+0

прочитайте мои комментарии, почему я делаю как указано выше – KDeogharkar

+4

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

+0

нет @Maniak. объект тот же, я передаю представление для объекта, потому что есть два разных файла .xib для iPad и iPhone. – KDeogharkar

0

У меня такая же проблема, я это исправить, удалить этот код

NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"CustomViewiPhoneLayout" owner:self options:nil]; 
customViewObject = [array objectAtIndex:0]; 

от метода определения инициализации.

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