此代码中的实例范围是什么?范围问题是它崩溃的原因吗?

时间:2012-02-14 21:47:25

标签: objective-c xcode scope initialization selector

#import "Mutation.h" //my class

@implementation NTAppDelegate

使用app delegate作为控制器

@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应该采用文本字段输入字符串并将其粘贴到我的变异对象中的ivar中...

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

-stringValue inh!

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

上面的作品

[mutation setInputString:newText];

上面的崩溃,卖得不好?不能称为突变。     }

1 个答案:

答案 0 :(得分:0)

我可以告诉你,_mutation纯粹是一个偏好问题。而不是创建名为mutation的实例变量的属性,而是创建一个名为_mutation的实例。当您想要将实例变量与本地生成的变量区分开来时,这很有用(您不必编写self.mutation,因为它是推断的实例变量)

在目标c中@synthesize时你可以命名实例变量。所以你可以写:     @synthesize mutation = thisIsMyMutation;

至于你的代码崩溃的原因,我认为这是因为你在声明它时保留了属性,因此它是强类型的。不要从声明中删除保留,因为该对象应该被保留。相反,请重写代码,以便在使用之前为属性分配内存。

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

总结:我认为您的问题在于您没有为该物业分配内存。这通常在init函数中完成。因为你在应用程序中委托你是否在didFinishLaunching中进行委托,它应该可以正常工作。