2012-02-26 2 views
0

내가 클래스 RandomGenerator을 무시했다. 나는 파일 GuessTheNumberAppDelegate.m에서 RandomGenerator 객체를 할당 :

#import "GuessTheNumberAppDelegate.h" 
#import "RandomGenerator.h" 
@implementation GuessTheNumberAppDelegate 
@synthesize window; 
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    NSAutoreleasePool* pool=[[NSAutoreleasePool alloc]init]; 
    RandomGenerator* random=[[RandomGenerator alloc]init]; 
    [pool drain]; 
} 
@end 

그리고 인터페이스 빌더에서 연결을 만들었습니다 :

Connection

Interface builder screen

하지만 NSTextField있는 내용입니다 변경되지 않은, 그것은 동일하게 나타납니다, 왜 이것을? -[RandomGenerator init]에서

Result

답변

1

, 당신은 당신의 XIB 파일에 이미 텍스트 필드에 아무 관계가없는 새로운 텍스트 필드 객체를 생성하고, 그 새로운 객체의 출구를 가리키는 것입니다. xib의 오브젝트는 로딩 메커니즘에 의해 할당 된 실제의 실제 오브젝트입니다. textField = [[NSTextField alloc] init];, * 또는 RandomGenerator* random=[[RandomGenerator alloc]init];이 필요하지 않습니다. 이 두 개체는 이미 xib에 있습니다.

그러나 몇 가지 사항을 변경해야합니다. 먼저 응용 프로그램 대리인이 RandomGenerator에 액세스 할 수있게하려면 콘센트에 연결하고 연결해야합니다 (IBOutlet RandomGenerator * generator;). 둘째, [textField setStringValue:@"Insert a number between 1 and 100"];에서 -[RandomGenerator init]으로 이동해야합니다. nib로드가 작동하는 방식으로 인해, IBOutlet 텍스트 필드가 연결되기 전에 발전기의 init 메소드가 호출되고, 텍스트 필드가 생성되기 전에 호출됩니다.

난 당신이 추가하면 꽤 확신 : 트릭을 할 것입니다

RandomGenerator
- (void)awakeFromNib { 
    [textField setStringValue:@"Insert a number between 1 and 100"]; 
} 

. 펜촉이로드되고 그 안에있는 모든 객체가 재생성되면 모든 객체에 awakeFromNib을 보내야합니다.


*하고 특히로 awakeFromNib 부분에, 어쨌든 NSTextField 내가 조쉬 동의

1

에 대한 올바른 초기화 아니다. 아래에는 몇 가지 추가 노트/테스트가 있습니다. 코드를 작성하여 확인해 보겠습니다.다음

// RandomGenerator.h 
#import <Foundation/Foundation.h> 
@interface RandomGenerator : NSObject { 
    IBOutlet NSTextField *textField; 
} 
@end 
-------------- 
// RandomGenerator.m 
#import "RandomGenerator.h" 
@implementation RandomGenerator 
- (void)awakeFromNib { 
    [textField setStringValue:@"Insert a number between 1 and 100"]; 
} 
@end 

그리고 AppDelegate에 파일 :

// GuessTheNumberAppDelegate.h 
#import <Cocoa/Cocoa.h> 
@interface GuessTheNumberAppDelegate : NSObject <NSApplicationDelegate> 
@property (assign) IBOutlet NSWindow *window; 
@end 
-------------- 
// GuessTheNumberAppDelegate.m 
#import "GuessTheNumberAppDelegate.h" 
#import "RandomGenerator.h" 
@implementation GuessTheNumberAppDelegate 
@synthesize window = _window; 
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
    RandomGenerator *random = [[RandomGenerator alloc] init]; 
    NSLog(@"%@",random); 
} 
@end 

건물과 당신이 기대하는 것을 얻을 프로젝트를 실행 : 아래 RandomGenerator 파일하지만 단순화 나는 당신의 질문에 대해 무슨 생각을 설명 할 수 있습니다

enter image description here

0

enter image description here

나는 RandomGenerator를 IBOutlet으로 연결할 필요가 없다는 것을 유의해야한다. 나는 그 헤더가 GuessTheNumberAppDelegate.h 파일에 포함되어 있는지 간단히 확인했다. 그러나 Josh는 더 일반적인 것을 염두에 두어야한다는 것을 명심하십시오, 그래서 당신은 여전히 ​​그것을 할 필요가 있습니다.

희망이 도움이됩니다.

+0

덕분에 많은 도움을주었습니다. –