2014-12-13 1 views
1

이 아키텍처가 최상의 아키텍처인지 여부 또는이 문제가 발생하는지 확실하지 않지만 objective-c 및 iOS 개발에서 상당히 새로운 것으로, 이는 내 자신의 아키텍처에서 위임 등을 사용하려는 나의 첫 번째 시도입니다.AppDelegate 사용자 지정, ViewController 속성 추가,이 속성 설정 : 인식 할 수없는 선택기를 인스턴스로 보냄 0x16574320

#import <UIKit/UIKit.h> 
#import <CoreData/CoreData.h> 
#import "XMPPStream.h" 
#import "XMPPController.h" 

@interface AppDelegate : UIResponder <UIApplicationDelegate> 

@property (strong, nonatomic) UIWindow *window; 

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; 
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel; 
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; 
@property (strong, nonatomic) UIViewController *currentViewController; 

//@property (strong, nonatomic) XMPPStream *xmppStream; 
@property (strong, nonatomic) XMPPController *myXMPPController; 

- (void)saveContext; 
- (NSURL *)applicationDocumentsDirectory; 


@end 

하나는 볼 수로서, UIViewController에 속성이 :

여기 내 AppDelegate에 인터페이스입니다.

다른 클래스에서는이 속성에 액세스하여 설정하려고합니다.

- (IBAction)SignInButtonPress:(UIButton *)sender { 

    AppDelegate *myAppDel = (AppDelegate *) [[UIApplication sharedApplication]delegate]; 
    myAppDel.currentViewController = self; 
:
#import <UIKit/UIKit.h> 
#import "XMPPStream.h" 

@interface SignInViewController : UIViewController <XMPPStreamDelegate> 
@property (strong, nonatomic) IBOutlet UITextField *UserNameTextField; 
@property (strong, nonatomic) IBOutlet UITextField *PassWordTextField; 
//@property (strong, nonatomic) XMPPStream *myStream; 
- (IBAction)SignInButtonPress:(UIButton *)sender; 

@end 

및 방법 SignInButtonPress에서

, 나는 정확히 (응용 프로그램을 처리 AppDelegate에 인스턴스의 UIViewController에 속성을 설정)하고 싶은 : 여기

이 클래스의 인터페이스입니다

해당 방법의 두 번째 줄 (myAppDel.currentViewController = self;)에서 앱이 다운되고 콘솔에 다음 내용이 출력됩니다.

: 16

2014년 12월 13일 17,451,515,23.744 myApp1919 : 60B] - [AppDelegate에 setCurrentViewController :] : 55 : 23.753을 myApp [1,919 : 60B] * 종단 인식 선택기 인스턴스 0x1653c010 2014년 12월 13일 (16)에 보내 앱 의한 캐치되지 않는 예외 'NSInvalidArgumentException'이유로 : - (0x305a6f83 0x3ad57ccf 0x305aa917 0x305a9203 0x304f8768 0x5fe97 0x32df9037 0x32df8fd7 0x32df8fb1 0x32de4717 0x32df8a2f : * 우선 투사 호출 스택 '[AppDelegate에 setCurrentViewController는 :] 미정 선택기 인스턴스 0x1653c010에 보냈' 0x32df8701 0x32df36cb 0x32dc36f77 0x3057220b 0x305716db 0x3056fecf 0x304daebf 0x304daca3 0x353e0663 0x3 2e2714d 0x7167d 0x3b264ab7)의 libC++ abi.dylib : 유형 NSException (lldb의 캐치되지 않는 예외)

그래서, 내 질문은, 왜이 작동하지 않습니다되어 함께 종료? 이 클래스 중 하나에 프로토콜 준수를 추가하는 것과 같은 무언가가 누락 되었습니까? 아니면 다른 것을 놓치고 있습니까? 아니면 이런 종류의 아키텍처로 시작하기에 엄청난 잘못이 있습니까?

감사합니다.

안부,

C

답변

3

사용 self.window.rootViewController = <any viewcontroller reference>;보다는 window.currentViewController.

설정 방법은 currentViewController입니다.

+0

myAppDel.rootViewController가 해결되지 않습니다. 이러한 속성이없는 것으로 보입니다. 또한 appDelegate 인터페이스에 currentViewController를 속성으로 추가합니까?이 속성에 대한 setter 및 getter가 생성되지 않습니까? 적어도 그것이 내가 기억하는 것처럼 보이지만 어쩌면 사실이 아니거나 작동해야 할 수도 있습니다. – user2011985

+0

appDelegate UIViewController 속성을 할당하고 초기화하는 것을 잊어 버렸습니다.그러나 귀하의 답변이 잘 작동하는 것 같아서, 나는이 질문에 대한 정답으로 그것을 받아 들일 것입니다. 감사! :) – user2011985

+0

예, 그냥 완료;) – user2011985

관련 문제