2010-05-03 2 views
0

В ClassA:Что случилось с моим самоопределяемым методом init?

- (ClassA *)initWithID:(NSString *) cID andTitle:(NSString *) cTitle { 
    ClassAID = cID; 
    ClassATitle = cTitle; 
    return self; 
}

В ClassB:

- (void)cellDidSelected { 
    ClassA *classAController = [[ClassA alloc] init]; 
//Program received signal: “EXC_BAD_ACCESS” when executing the following line. 
    classAController = [classAController initWithClassAID:ClassAID andClassATitle:ClassATitle]; 
    NSLog(@"I want to get the value of ID:%@ and Title:%@ here.", [classAController ClassATitle], [classAController ClassAID]) 
}

Может кто-нибудь момент, когда это не так? Большое спасибо.

+0

Как определяется 'ClassA'? Является ли это подклассом любого типа (в частности, с подпрограммой 'init')? – fbrereto

+0

'@interface ClassA: UIViewController {...}' –

ответ

1

Попробуйте использовать:

- (id)initWithID:(NSString*) cID andTitle:(NSString*) cTitle { 

    if (!(self = [super init])) 
     return nil; 

    ClassAID = cID; 
    ClassATitle = cTitle; 
    return self; 
} 

Тогда вы можете просто сделать что-то вроде:

ClassA * classA = [[ClassA alloc] initWithID:anID andTitle:aTitle]; 

И я рекомендовал бы ClassAID и ClassATitle как свойства, если они не сделали, и если они вы должны использовать:

[self setClassAID:cID]; 
[self setClassATitle:cTitle]; 

Таким образом, они будут сохранены в пропе Rly.

+0

Это решение должно также упоминать удаление строки [[ClassA alloc] init], но оно является лучшим из доступных на данный момент. – fbrereto

+0

он все еще не работал для меня .../_ \, спасибо. –

+0

Каким образом это не сработало? –

0

Обычно структура один будет разрабатывать для ситуации, вы публикуемая выше будет включать призыв к [super init] внутри самой initWithID, так что у вас будет только один init процедуры под названием каждого объекта конкретизации. Однако я не вижу, чтобы быть основной причиной проблемы, которую вы видите.

+0

Увидев ваше сообщение, я попробую еще раз и все еще не удалось. Я инициализировал classAController и передал его как параметр. Почему мне все еще нужно вызвать [super init]? Благодарю. –

+0

Поскольку супер объект должен быть инициализирован, а также ваш объект. – JeremyP

+0

Спасибо, ответим! –

Смежные вопросы