iOS Facebook sdk 4.0 分享图片
iOS Facebook sdk 4.0 share an image
我正在尝试使用新的 facebook sdk 4.0 分享图片。
我在 facebook 示例中使用相同的代码,但是当我尝试显示 FBSDKShareDialog
.
时出现此异常
* Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format
string "SELF NOT NULL"'
* First throw call stack: ( 0 CoreFoundation 0x000000010b782a75 __exceptionPreprocess + 165 1 libobjc.A.dylib
0x000000010b35abb7 objc_exception_throw + 45 2 Foundation
0x000000010aca097d _qfqp2_performParsing + 8495 3 Foundation
0x000000010ac9e7e6 +[NSPredicate predicateWithFormat:arguments:] + 46
4 Foundation 0x000000010ac9e7a0
+[NSPredicate predicateWithFormat:] + 142 5 PhotoGunShot 0x0000000107f1a4fc -[FBSDKShareDialog
_showShareSheetWithCanShowError:validationError:] + 653 6 PhotoGunShot 0x0000000107f18f7b
-[FBSDKShareDialog show] + 147
这是代码
- (UIAlertAction*) createActionForFacebookWithMediaPath:(NSString*) path andMediaType:(MediaType) mediaType {
NSString * mediaName = mediaType == kMediaTypeImage ? NSLocalizedString(@"KEY_IMAGE", nil) : NSLocalizedString(@"KEY_VIDEO", nil);
UIAlertAction* facebookAction = [UIAlertAction actionWithTitle:[NSString stringWithFormat:@"%@ %@",NSLocalizedString(@"KEY_SHARE_YOUR", nil),mediaName] style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
NSObject<FBSDKSharingContent> * content = nil;
if (mediaType == kMediaTypeImage) {
NSURL * fileURL = [NSURL URLWithString:path];
FBSDKSharePhoto *photo = [[FBSDKSharePhoto alloc] init];
photo.imageURL = fileURL;
// photo.userGenerated = YES;
FBSDKSharePhotoContent * photoContent = [[FBSDKSharePhotoContent alloc] init];
photoContent.photos = @[photo];
content = photoContent;
}
else if (mediaType == kMediaTypeVideo) {
NSURL *videoURL = [NSURL fileURLWithPath:path];
FBSDKShareVideo *video = [[FBSDKShareVideo alloc] init];
video.videoURL = videoURL;
FBSDKShareVideoContent * videoContent = [[FBSDKShareVideoContent alloc] init];
videoContent.video = video;
content = videoContent;
}
[FBSDKShareDialog showFromViewController:self
withContent:content
delegate:nil];
}];
return facebookAction;
}
- (UIAlertAction*) createActionForCameraRollWithMediaPath:(NSString*) path andMediaType:(MediaType) mediaType {
return nil;
}
- (void) showShareOptionsForMediaPath:(NSString*)path {
UIAlertController * alertControl =[UIAlertController alertControllerWithTitle:NSLocalizedString(@"KEY_SHARE_TITLE", nil) message:nil preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction * cancelAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"KEY_CANCEL", nil) style:UIAlertActionStyleCancel handler:NULL];
[alertControl addAction:cancelAction];
MediaType mediaType = [self checkMediaTypeAtPath:path];
switch (mediaType) {
case kMediaTypeImage:
{
UIAlertAction * fbAction =[self createActionForFacebookWithMediaPath:path andMediaType:kMediaTypeImage];
[alertControl addAction:fbAction];
}
break;
case kMediaTypeVideo:
{
UIAlertAction * fbAction =[self createActionForFacebookWithMediaPath:path andMediaType:kMediaTypeVideo];
[alertControl addAction:fbAction];
}
break;
case kMediaTypeUnknown:
{
//EXCEPTION
}
break;
default:
break;
}
[self presentViewController:alertControl animated:YES completion:nil];
}
首先我创建了一个显示共享选项的 UIAlertController,并添加了相关项 UIAlertAction
,当我调用共享对话框时出现异常。
有什么建议吗?
此问题将在下一个 SDK 版本中修复。
显然,您可以从 FBSDKShareDialog 中删除以下行并从源代码构建框架以解决它。
https://github.com/facebook/facebook-ios-sdk/blob/master/FBSDKShareKit/FBSDKShareKit/FBSDKShareDialog.m#L442
您可以在此处查看 Andrea 提交的错误:https://developers.facebook.com/bugs/964300063610778/
我正在尝试使用新的 facebook sdk 4.0 分享图片。
我在 facebook 示例中使用相同的代码,但是当我尝试显示 FBSDKShareDialog
.
* Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "SELF NOT NULL"' * First throw call stack: ( 0 CoreFoundation 0x000000010b782a75 __exceptionPreprocess + 165 1 libobjc.A.dylib
0x000000010b35abb7 objc_exception_throw + 45 2 Foundation
0x000000010aca097d _qfqp2_performParsing + 8495 3 Foundation
0x000000010ac9e7e6 +[NSPredicate predicateWithFormat:arguments:] + 46 4 Foundation 0x000000010ac9e7a0 +[NSPredicate predicateWithFormat:] + 142 5 PhotoGunShot 0x0000000107f1a4fc -[FBSDKShareDialog _showShareSheetWithCanShowError:validationError:] + 653 6 PhotoGunShot 0x0000000107f18f7b -[FBSDKShareDialog show] + 147
这是代码
- (UIAlertAction*) createActionForFacebookWithMediaPath:(NSString*) path andMediaType:(MediaType) mediaType {
NSString * mediaName = mediaType == kMediaTypeImage ? NSLocalizedString(@"KEY_IMAGE", nil) : NSLocalizedString(@"KEY_VIDEO", nil);
UIAlertAction* facebookAction = [UIAlertAction actionWithTitle:[NSString stringWithFormat:@"%@ %@",NSLocalizedString(@"KEY_SHARE_YOUR", nil),mediaName] style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
NSObject<FBSDKSharingContent> * content = nil;
if (mediaType == kMediaTypeImage) {
NSURL * fileURL = [NSURL URLWithString:path];
FBSDKSharePhoto *photo = [[FBSDKSharePhoto alloc] init];
photo.imageURL = fileURL;
// photo.userGenerated = YES;
FBSDKSharePhotoContent * photoContent = [[FBSDKSharePhotoContent alloc] init];
photoContent.photos = @[photo];
content = photoContent;
}
else if (mediaType == kMediaTypeVideo) {
NSURL *videoURL = [NSURL fileURLWithPath:path];
FBSDKShareVideo *video = [[FBSDKShareVideo alloc] init];
video.videoURL = videoURL;
FBSDKShareVideoContent * videoContent = [[FBSDKShareVideoContent alloc] init];
videoContent.video = video;
content = videoContent;
}
[FBSDKShareDialog showFromViewController:self
withContent:content
delegate:nil];
}];
return facebookAction;
}
- (UIAlertAction*) createActionForCameraRollWithMediaPath:(NSString*) path andMediaType:(MediaType) mediaType {
return nil;
}
- (void) showShareOptionsForMediaPath:(NSString*)path {
UIAlertController * alertControl =[UIAlertController alertControllerWithTitle:NSLocalizedString(@"KEY_SHARE_TITLE", nil) message:nil preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction * cancelAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"KEY_CANCEL", nil) style:UIAlertActionStyleCancel handler:NULL];
[alertControl addAction:cancelAction];
MediaType mediaType = [self checkMediaTypeAtPath:path];
switch (mediaType) {
case kMediaTypeImage:
{
UIAlertAction * fbAction =[self createActionForFacebookWithMediaPath:path andMediaType:kMediaTypeImage];
[alertControl addAction:fbAction];
}
break;
case kMediaTypeVideo:
{
UIAlertAction * fbAction =[self createActionForFacebookWithMediaPath:path andMediaType:kMediaTypeVideo];
[alertControl addAction:fbAction];
}
break;
case kMediaTypeUnknown:
{
//EXCEPTION
}
break;
default:
break;
}
[self presentViewController:alertControl animated:YES completion:nil];
}
首先我创建了一个显示共享选项的 UIAlertController,并添加了相关项 UIAlertAction
,当我调用共享对话框时出现异常。
有什么建议吗?
此问题将在下一个 SDK 版本中修复。
显然,您可以从 FBSDKShareDialog 中删除以下行并从源代码构建框架以解决它。 https://github.com/facebook/facebook-ios-sdk/blob/master/FBSDKShareKit/FBSDKShareKit/FBSDKShareDialog.m#L442
您可以在此处查看 Andrea 提交的错误:https://developers.facebook.com/bugs/964300063610778/