//////////////////// Mutation.h
#import <Foundation/Foundation.h>
@interface Mutation : NSObject
@property (assign) NSString *inputString;
@property (assign) NSString *outputString;
@end
//////////////////// Mutation.m
#import "Mutation.h"
@implementation Mutation
@synthesize inputString;
@synthesize outputString;
@end
//////////////////// NTAppDelegate.h
#import <Cocoa/Cocoa.h>
#import "Mutation.h"
@interface NTAppDelegate : NSObject <NSApplicationDelegate>
@property (assign) IBOutlet NSWindow *window;
@property (weak) IBOutlet NSTextField *dataField;
@property (weak) IBOutlet NSTextField *outputField;
@property (assign) Mutation *mutation;
- (IBAction)receiveUserTextFromTextField:(NSTextField *)sender;
@end
//////////////////// NTAppDelegate.m
#import "NTAppDelegate.h"
#import "Mutation.h"
@implementation NTAppDelegate
@synthesize window = _window;
@synthesize dataField = _dataField;
@synthesize outputField = _outputField;
@synthesize mutation = mutation; //statement #1
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification //#3 (block)
{
Mutation *aMutation = [[Mutation alloc] init];
[self setMutation:aMutation];
[aMutation setInputString:@"new"];
[aMutation setOutputString:@"old"];
NSLog(@"Mutation inputString is %@; outputString is %@", [aMutation inputString], [aMutation outputString]);
}
- (IBAction)receiveUserTextFromTextField:(NSTextField *)sender //#2 (block)
{
// assign the user's entered text to Mutation's inputString
NSString* newText = [sender stringValue]; // -stringValue inherited from NSControl
NSLog (@"%@ was entered", newText); // <-THIS WORKS
[mutation setInputString:newText]; // <-CRASH statement #4 (crashes)
NSLog(@"Mutation(2) inputString is %@; outputString is %@", [aMutation inputString], [aMutation outputString]);
}
@end
/////// Я использую ARC. Попытка индуктивно получить представление об основах objC. Это продолжение моего первого вопроса ...
Мои конкретные вопросы относятся к пронумерованным строкам / блокам кода (# 1- # 4) выше.
1 это создание экземпляра мутации, которая является глобальной?
2 мне нужно передать ссылку на эту мутацию здесь? и если это так,
введя другой аргумент в функцию?
3 Я не понимаю, почему при сборке и запуске ведение журнала происходит сначала из блока № 3, затем из блока № 2
4, почему происходит сбой этой строки (в журнале указано, что селектор отменен)
Вход
при загрузке программы, записи в журнале, в порядке:
а) здесь идут данные пользователя ... введено
b) Мутация (2) inputString is (null); outputString равен (null)
в) Мутация inputString является новой; outputString старая
тогда, если пользователь вводит данные (оператор № 4):
плохие вещи случаются.