我正在开发一个应用程序,其中集成了天空驱动框架。但是当我尝试登录时,我的应用程序崩溃了:
uncaught exception 'NSInternalInconsistencyException
原因:
Could not load NIB in bundle: 'NSBundle </var/mobile/Applications/
使用“LiveSDK/Library”可以正常工作,但该库不能与 ARC 一起使用。 我做错了什么?
这是我的代码:
(void)signInMethod {
self.liveClient =
[[LiveConnectClient alloc] initWithClientId:APP_CLIENT_ID
delegate:self
userState:@"initialize"];
}
-(void)authCompleted:(LiveConnectSessionStatus) status
session:(LiveConnectSession *) session
userState:(id) userState { if ([userState isEqual:@"initialize"]) {
[self.liveClient login:self
scopes:[NSArray arrayWithObjects:@"wl.signin", nil]
delegate:self
userState:@"signin"];
} if ([userState isEqual:@"signin"]) {
if (session != nil)
{
NSLog(@"signed in");
}
} }
-(void)authFailed:(NSError *) error
userState:(id)userState { NSLog(@"%@",[NSString stringWithFormat:@"Error: %@", [error localizedDescription]]); }
最佳答案
错误消息基本上表明您有一个 ViewController 正在尝试加载 NIB 文件,但它找不到它,因为它未包含在资源中,或者它的名称与预期不同。
完整的错误消息应包含文件名 - 因为您没有发布它,所以我无法确定,但 LiveAuthDialog_iPad
或 LiveAuthDialog_iPhone
可能会丢失在这里,这些是我发现 LiveSDK 使用的唯一 .xib 文件。
删除对 .xib 文件的引用并将其重新添加到您的项目中(如果存在),否则将其添加到您的项目中。然后再次清理并构建。
更新(见评论):
如果使用已编译的库版本 ('LiveSDK.framework'
)(而不是导入 LiveSDK 源),则框架预计会包含在应用程序包的资源
中code> 文件夹,可以将其添加到宿主项目的复制捆绑资源
构建阶段,或者将其添加到复制文件构建阶段
并将目标设置为 资源
。
位置很重要,因为 LiveSDK 的 -[LiveAuthRequest authorize]
方法将主要尝试从框架包加载用于身份验证对话框的 NIB 文件(使用 -[LiveAuthHelper getSDKBundle]
),期望在主包的资源中找到框架:
+ (NSBundle *) getSDKBundle
{
NSString *sdkPath = [[NSBundle mainBundle] pathForResource:@"LiveSDK"
ofType:@"framework"];
return (sdkPath)? [NSBundle bundleWithPath:sdkPath] : [NSBundle mainBundle];
}
关于ios - iPhone 应用程序中的 Skydrive 登录崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24511326/