非常奇怪NSInvalidArgumentException与addSubview FBLoginView

我有一个应用程序与2视图的iOS,我试图将FBLoginView添加到他们两个。 视图1和视图2都添加了FBLoginView。 程序从视图1开始。

场景1 :我在视图1中,没有login。我进入视图2, 程序崩溃

场景2 :我在视图1,并login。我进入视图2,程序不会崩溃,并显示在视图2 FBLoginView,一切工作正常。

场景3 :我在视图1,没有login。我login,然后我进入视图2,程序不会崩溃,并显示在视图2 FBLoginView,一切工作正常。

在场景2和场景3中,我也可以在视图2中注销,这一切都可以。 注销后我甚至可以退出视图2,回来后仍然可以。 程序崩溃的唯一情况是,如果我从头开始程序,我以前没有login,我进入视图2 。 然后我得到这个错误消息:

由于未捕获的exception“NSInvalidArgumentException”而终止应用,原因:' * – [__ NSCFConstantString stringByAppendingString:]:nil argument'

viewDidLoad函数在两个视图中都是相同的,它们是从HelloFacebookSample复制粘贴的:

[super viewDidLoad]; // Do any additional setup after loading the view from its nib. FBLoginView *loginview = [[FBLoginView alloc] init]; loginview.frame = CGRectOffset(loginview.frame, 5, 5); #ifdef __IPHONE_7_0 #ifdef __IPHONE_OS_VERSION_MAX_ALLOWED #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_7_0 if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) { loginview.frame = CGRectOffset(loginview.frame, 5, 25); } #endif #endif #endif loginview.delegate = (id)self; [self.view addSubview:loginview]; [loginview sizeToFit]; 

如果我在视图2中删除这行代码:[self.view addSubview:loginview]; 该程序不再崩溃。 但是,通过写入NSLog,我可以看到它不会在该行崩溃,它通过。 事实上,通过在视图2中的每个方法的开始和结束处写入NSLog,我已经确认了我在视图2中的所有代码都已通过。 我的代码中没有特定的行导致崩溃。

从我搜集的googlesearch中,我唯一的猜测是,FBLoginView不知道它是否应该在FBLoginView的view 2中写入“Login with Facebook”或“Logout”,因此错误中的“nil argument”信息。 如上所述,我不认为FBLoginView能够同时处理多个视图。

思考? 我错过了什么,或者这是FBLoginView的问题?

任何给定的视图一次只能是一个视图层次结构的一部分。 如果你试图将同一个视图对象添加到多个视图,那么怪异的崩溃并不奇怪。 (一般来说,将相同视图类的不同实例添加到不同视图是很好的。)