2011-08-18 5 views
1

저는 현재 응용 프로그램 위임에 액세스해야하는 첫 번째 CoreData-Application을 작성하려고합니다. 그래서 저는 올바른 대의원이 있는지를 결정하기 위해 읽으려는 대의원 내부에서 약간의 변수를 만들려고했습니다. 그러나, 대신 내 대리인에 액세스 할 수없는 대신 새로운 하나를 만들 것 같습니다. "위임에 : 안녕하세요, 세계"다른 클래스에서 NSApplications 대리자에 액세스 하시겠습니까?

//delegate.h 
#import <Cocoa/Cocoa.h> 

@interface delegate_TestAppDelegate : NSObject <NSApplicationDelegate> { 
@private 
    NSWindow *window; 
    NSString * myString; 
} 

@property (assign) IBOutlet NSWindow *window; 
@property (retain) NSString * myString; 

@end 

//delegate.m 
#import "delegate_TestAppDelegate.h" 

@implementation delegate_TestAppDelegate 

@synthesize window, myString; 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    self.myString = @"Hello, World"; 
    NSLog(@"In delegate: %@", self.myString); 
} 

@end 

//MyClass.h 
#import <Foundation/Foundation.h> 
#import "delegate_TestAppDelegate.h" 


@interface MyClass : NSObject { 
@private 
    delegate_TestAppDelegate * del; 
} 
- (IBAction)click:(id)sender; 

@end 

//MyClass.m 
#import "MyClass.h" 

@implementation MyClass 

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     del = [[NSApplication sharedApplication] delegate]; 
    } 

    return self; 
} 

- (void)dealloc 
{ 
    [super dealloc]; 
} 

- (IBAction)click:(id)sender { 
    NSLog(@"Click: %@", del.myString); 
} 
@end 

이상하게도,이 코드를 반환 :하지만 여기 내 코드입니다 "클릭 (널)" 는 어디에 오류가 무엇입니까?

+0

어디에서 MyClass를 초기화합니까? – thomashw

+0

인터페이스 작성기의 NSObject로 –

답변

5

응용 프로그램의 delegate 속성에 할당되기 전에 del을 할당했다고 의심됩니다. del 포인터를 없애고 위임자가 필요할 때마다 [[NSApplication sharedApplication] delegate]으로 전화하는 것이 좋습니다.

관련 문제