1

在给出重复标记之前,请阅读我的整个问题:

我知道可能有很多与我的标题相关的问题,但问题不同。

我正在使用Mac OS X 10.9.3和 Xcode 5.1.1

在我的应用程序中,我只想在 Facebook 和 Twitter 上分享图片、URL 链接和一些描述,所以我使用SLComposeViewController了,我的代码如下。

-(void)btnShareTapped:(UIButton *)sender
{
  if(sender.tag == 100)
    [self shareProductContentOnTwitterORFB:@"Facebook"];
  else 
    [self shareProductContentOnTwitterORFB:@"Twitter"];   
}

方法体:

-(void) shareProductContentOnTwitterORFB:(NSString *) shareON
{
    SLComposeViewController *shareKit =  nil; // also tried with [[SLComposeViewController alloc] init];
    if([shareON isEqualToString:@"Twitter"])
        shareKit = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
    else
        shareKit = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
    [shareKit setInitialText:@"My Description Text."];
    [shareKit addImage:[UIImage imageNamed:@"boston-shopping.jpg"]]; // I also tried with .png image
    [shareKit addURL:[NSURL URLWithString:@"www.google.com"]];
    //[self.view.window.rootViewController presentViewController:shareKit animated:YES completion:nil];
    [self presentViewController:shareKit animated:YES completion:nil]; /// I also tried with above comment.
}

执行上述代码后,SLComposeViewController将打开并在我的控制台中

<Error>: CGImageCreate: invalid image size: 0 x 0.

仅在Facebook 上显示并得到完全相同的问题看看这个问题。 我确定我的图像不是nil,我已经检查过了。

上面的问题说 -

这个错误似乎在新版本的 iOS (6.0.1) 中得到修复 至少自从我上次升级以来我一切都运行良好。

但是我在iOS 6.1上进行测试仍然遇到同样的问题,在iOS 7.0 和 7.1中,控制台中的错误消息( <Error>: CGImageCreate: invalid image size: 0 x 0.)不显示,但我无法在Facebook 和 Twitter中设置 App 。
什么是问题?我错在哪里?这是苹果虫??
请给出你的建议。

4

2 回答 2

1

在我打电话后看看这个堆栈跟踪[self presentViewController:shareKit animated:YES completion:nil];

* thread #1: tid = 0x199f3, 0x0026a871 CoreGraphics`CGPostError, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
  * frame #0: 0x0026a871 CoreGraphics`CGPostError
    frame #1: 0x0021bfc0 CoreGraphics`CGImageCreate + 296
    frame #2: 0x00458ea5 UIKit`_UICreateCGImageFromCARenderServerBuffer + 201
    frame #3: 0x007e7b0e UIKit`-[UISnapshotView captureSnapshotRect:fromView:withSnapshotType:] + 1712
    frame #4: 0x008fdfa7 UIKit`-[_UIRemoteViewController _snapshotAndRemoveTextEffectsRemoteView] + 337
    frame #5: 0x008fe064 UIKit`-[_UIRemoteViewController _applicationWillResignActive:] + 33
    frame #6: 0x00f9a4f9 Foundation`__57-[NSNotificationCenter addObserver:selector:name:object:]_block_invoke_0 + 40
    frame #7: 0x014e50c5 CoreFoundation`___CFXNotificationPost_block_invoke_0 + 85
    frame #8: 0x0143fefa CoreFoundation`_CFXNotificationPost + 2122
    frame #9: 0x00ecebb2 Foundation`-[NSNotificationCenter postNotificationName:object:userInfo:] + 98
    frame #10: 0x0041abb1 UIKit`-[UIApplication _deactivateForReason:notify:] + 381
    frame #11: 0x0041ac3d UIKit`-[UIApplication _deactivateForReason:] + 48
    frame #12: 0x0041cfd4 UIKit`_alertItemStateChanged + 73
    frame #13: 0x014e52e3 CoreFoundation`__CFNotificationCenterAddObserver_block_invoke_0 + 163
    frame #14: 0x014e53a0 CoreFoundation`____CFXNotificationPostToken_block_invoke_0 + 176
    frame #15: 0x0144a920 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 16
    frame #16: 0x0140dd31 CoreFoundation`__CFRunLoopDoBlocks + 257
    frame #17: 0x01431c51 CoreFoundation`__CFRunLoopRun + 2273
    frame #18: 0x01430f44 CoreFoundation`CFRunLoopRunSpecific + 276
    frame #19: 0x01430e1b CoreFoundation`CFRunLoopRunInMode + 123
    frame #20: 0x01dcb7e3 GraphicsServices`GSEventRunModal + 88
    frame #21: 0x01dcb668 GraphicsServices`GSEventRun + 104
    frame #22: 0x0041dffc UIKit`UIApplicationMain + 1211
    frame #23: 0x00002f3d iostest`main(argc=1, argv=0xbffff0d0) + 141 at main.m:16

我试图在我的示例项目中运行你的代码,我发现了这些:

  • 在模态视图出现 之后[self presentViewController:shareKit animated:YES completion:nil];和之前打印了错误消息。shareKit
  • 错误消息是从CGPostErrorin打印的CoreGraphics
  • 我认为这个错误是因为-[UISnapshotView captureSnapshotRect:fromView:withSnapshotType:].
  • 我试图注释掉你的这一行,[shareKit addImage:[UIImage imageNamed:@"boston-shopping.jpg"]];但我仍然收到错误消息。所以,错误不是因为你的代码。

在我看来,我认为您收到的错误消息是因为UISnapshotView试图拍摄当前屏幕的快照,但那里什么也没有,或者该方法存在一些错误。因此,它传递了错误的width = 0 & height = 0参数来CGImageCreate导致错误。

所以,请放心,这不是你的错误。忽略它。

于 2014-06-10T19:47:14.597 回答
-1

尝试CGImageRef自己创建对象。您可以替换该行:

[shareKit addImage:[UIImage imageNamed:@"boston-shopping.jpg"]];

有了这个:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"boston-shopping" ofType:@"jpg"];
CGDataProviderRef source = CGDataProviderCreateWithFilename([filePath cStringUsingEncoding:NSUTF8StringEncoding]);
CGImageRef imageRef = CGImageCreateWithJPEGDataProvider(source,
                                                        NULL,
                                                        true,
                                                        kCGRenderingIntentDefault);
[shareKit addImage:[UIImage imageWithCGImage:imageRef]];
CGImageRelease(imageRef);
于 2014-06-06T09:21:07.260 回答