Какова область действия экземпляра в этом коде?Является ли проблема сферой действия, почему он падает? - PullRequest
0 голосов
/ 15 февраля 2012
#import "Mutation.h" //my class

@implementation NTAppDelegate

с использованием делегата приложения в качестве контроллера

@synthesize window = _window;
@synthesize dataField = _dataField;
@synthesize OutputField = _OutputField;

@synthesize mutation;

почему бы не _mutation?

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
Mutation *aMutation = [[Mutation alloc] init];
[self setMutation:aMutation];
[self.mutation setInputString:@"new"];
[self.mutation setOutputString:@"old"];
NSLog(@"Mutation inputString is %@; outputString is %@",[mutation inputString],[mutation outputString]);
}

getUserText должен принять строку ввода текстового поля и вставить ее в ивар вобъект моей мутации ...

- (IBAction)getUserText:(NSTextField *)sender
{
// assign the users entered text to mutation's inputString
NSString* newText = [sender stringValue];

-stringValue inh от NSControl EUREKA!

NSLog (@"%@ was entered", newText);

ВЫШЕ РАБОТАЕТ

[mutation setInputString:newText];

ВЫШЕ ПРОБЛЕМ, плохая продажа?не может вызвать мутацию.}

1 Ответ

0 голосов
/ 15 февраля 2012

Я могу вам сказать, что мутация - это просто вопрос предпочтений. Вместо свойства, создающего переменную экземпляра с именем mutation, оно создает переменную с именем _mutation. Это полезно, когда вы хотите отличить переменные экземпляра от локально сгенерированных переменных (вам не нужно писать self.mutation, потому что это переменная экземпляра, которая выводится)

В цели c, когда вы @ynthesize вещи, вы можете назвать переменную экземпляра как угодно. Чтобы вы могли написать: @synthesize mutation = thisIsMyMutation;

Что касается того, почему ваш код падает, я думаю, это потому, что вы сохраняете свойство, когда объявляете его, чтобы оно было строго типизировано. Не удаляйте retain из объявления, потому что объект должен быть сохранен. Вместо этого переписайте свой код, чтобы выделить его для свойства перед его использованием.

self.mutation = [[Mutation alloc] init];
[self.mutation setInputString:@"new"];
[self.mutation setOutputString:@"old"];

РЕЗЮМЕ: Я полагаю, что ваша проблема заключается в том, что вы не выделяете память для свойства. Обычно это делается в функции init. Потому что ваш делегат в приложении, если вы делаете это в didFinishLaunching, должен работать просто отлично.

...