이것은 두 개의 별도 텍스트 필드에서 사용자가 입력 한 두 개의 숫자를 가져와 '추가'버튼을 클릭하면 함께 추가하는 간단한 프로그램입니다. 이 작업을 수행 한 방법은 NSTextField를 MyTextField라는 클래스로 서브 클래 싱하는 것입니다. 내 오류가 메모리 누수와 관련이 있다고 생각하지만 경험이 부족한 프로그래머이기 때문에 메모리를 할당하고 할당을 해제하는 방법을 잘 모릅니다.텍스트 필드의 정보가 유지되지 않습니다. 객차 c
문제는 : 추가 버튼을 클릭하면 완벽하게 작동합니다. 그러나 다시 클릭하면 정확한 양이 표시되지 않습니다. 입력을 0으로 출력하고 0을 계속 출력합니다. 코드를 첨부했습니다.
참고 : I 을 알아두면 훨씬 복잡해집니다! 나는 똑같은 오류를 표시하는 훨씬 복잡한 프로그램의 단순한 버전을 보여 주기만하면된다.
MyTextField.h
#import <Cocoa/Cocoa.h>
@interface MyTextField : NSTextField
@property (strong) NSString* number;
@property double dblNum;
-(id)initWithNumber:(NSString *)number;
-(NSString *)getNumber;
-(void)setNumber;
-(double)getDblNum;
-(void)setDblNum;
-(double)calcSum:(MyTextField *)other;
-(NSString *)description;
@end
MyTextField.m
#import "MyTextField.h"
@implementation MyTextField
-(id)initWithNumber:(NSString *)number{
self = [super init];
if (self) {
if ([number length] > 0){
_number = number;
}else{
_number = @"0";
}
[self setDblNum];
}
return self;
}
- (id)init {
return [self initWithNumber:[self getNumber]];
}
-(NSString *)getNumber{
return _number;
}
-(void)setNumber{
_number = [self stringValue];
}
-(double)getDblNum{
return _dblNum;
}
-(void)setDblNum{
_dblNum = [_number doubleValue];
}
-(double)calcSum:(MyTextField *)other{
return [self getDblNum] + [other getDblNum];
}
- (NSString *)description{
return [NSString stringWithFormat: @"Number: %f", _dblNum];
}
@end
ViewController.h
#import <Cocoa/Cocoa.h>
#import "MyTextField.h"
@interface ViewController : NSViewController
@property (strong) IBOutlet MyTextField *valueOne;
@property (strong) IBOutlet MyTextField *valueTwo;
@property (strong) IBOutlet NSTextField *answer;
- (IBAction)btnAdd:(id)sender;
@end
ViewController.m
#import "ViewController.h"
#import "MyTextField.h"
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)setRepresentedObject:(id)representedObject {
[super setRepresentedObject:representedObject];
}
- (IBAction)btnAdd:(id)sender {
_valueOne = [[MyTextField alloc] initWithNumber:[_valueOne stringValue]];
_valueTwo = [[MyTextField alloc] initWithNumber:[_valueTwo stringValue]];
double ans = [_valueOne calcSum:_valueTwo];
_answer.stringValue = [NSString stringWithFormat:@"%.2f", ans];
}
@end
P. 성가신 양의 코드를 유감스럽게 생각합니다. 감사!
네,하지만 실제 프로젝트에 필요하기 때문에 서브 클래 싱하는 동안 이러한 문제를 피하는 방법을 알아야했습니다. 텍스트는 NSTextField의 속성이 아니므로 _valueOne.text를 [_valueOne stringValue]로 변경해야했습니다. 이것은 일했다! 정말 고마워! 또한, 내 생성자가 필요 없다는 의미입니까? – Ares
쓰레기; 당신은'text' 속성에 대해 옳습니다; 나는 IOS의'UITextField'를 생각하고 있었다. 그러나'NSTextField'에서'doubleValue'를 직접 호출하고 문자열을 처리해야하는 것을 건너 뛸 수 있습니다. – NRitH
특별히'NSTextField'를 하위 클래스로 만들 필요가 있습니까? – NRitH