2013-05-15 2 views
0

я получил следующий класс:Краш вэнь нажав "Открыть в Instagram", а с помощью UIDocumentInteractionController

.h файла:

#import <Foundation/Foundation.h> 

@interface CHTInstagramSharer : NSObject<UIDocumentInteractionControllerDelegate> 
@property (nonatomic, retain) UIDocumentInteractionController *dic; 
-(void) sharePic:(UIImage *)image; 
@end 

.m файл

#import "CHTInstagramSharer.h" 
#import <UIKit/UIKit.h> 
#import "BaseController.h" 

@implementation CHTInstagramSharer 


-(void) sharePic:(UIImage *)image{  

    NSString * jpgPath = [Utils saveImage:image toFile:@"cover.igo"]; 
    NSURL *url = [NSURL fileURLWithPath:jpgPath]; 
    self.dic = [UIDocumentInteractionController interactionControllerWithURL: url]; 
    self.dic.UTI = @"com.instagram.exclusivegram"; 
    self.dic.delegate = self; 
    self.dic.annotation = [NSDictionary dictionaryWithObject:@"Caption Test" forKey:@"InstagramCaption"]; 
    [self.dic presentOpenInMenuFromRect:CGRectMake(0, 0, 320, 44) inView:[BaseController sharedInstance].view animated: YES ]; 
} 
@end 

Он представляет контроллер с опцией «Открыть в Instagram», но когда я нажимаю на это, приложение выходит из строя.

Любая идея, почему?

Дополнительная информация, когда я смотрю на URL в отладчике, я получаю: файл: //localhost/var/mobile/Applications/53435781-3BAB-4B02-A80C-FC088F696AE8/Library/Caches/cover.igo

Сбой, кажется, происходит в [_UIOpenWithAppActivity performActivity], когда я смотрю в трассировку стека.

+0

Что такое авария? Неподготовлено исключение? плохой доступ? вне пределов доступа? –

+0

См. Мой обновленный ответ, вы сможете копировать и вставлять метод, который я создал, и использовать его в вашем приложении. Надеюсь, поможет. – dana0550

+1

плохой доступ. Я нашел проблему, это было просто освобождение объекта совместного использования, которое случалось слишком рано. – madewulf

ответ

8

Похоже, что вы не сохраняете контролер документа. Я использую Instagram крючок, как это:

EDIT: Modified для ARC

- (void)sharePic:(UIImage *)image { 

    NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; 
    NSString *savedImagePath = [documentsDirectory stringByAppendingPathComponent:@"Image.ig"]; 
    NSData *imageData = UIImageJPEGRepresentation(image, 0.8); 
    [imageData writeToFile:savedImagePath atomically:YES]; 
    NSURL *imageUrl = [NSURL fileURLWithPath:savedImagePath]; 

    UIDocumentInteractionController *docController = [UIDocumentInteractionController interactionControllerWithURL:imageUrl]; 
    [docController retain]; 
    docController.UTI = @"com.instagram.exclusivegram"; 
    docController.delegate = self; 
    docController.annotation = [NSDictionary dictionaryWithObject:@"Caption Test" forKey:@"InstagramCaption"]; 
    [docController presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES]; 
    docController = nil; 
} 

Позвольте мне знать, если это помогает.

+0

Спасибо, но если вы читаете немного дальше, есть: В качестве альтернативы, если вы хотите показать только Instagram в списке приложений (вместо Instagram плюс любые другие приложения, совместимые с общедоступными/jpeg), вы можете указать класс расширения igo, который имеет тип com.instagram.exclusivegram. – madewulf

+0

Вижу, вы правы. Это, должно быть, было добавлено после того, как я использовал API-интерфейс. Прочитайте отредактированный ответ, похоже, что вы не сохраняете DocumentController. – dana0550

+0

Это потому, что я использую ARC. – madewulf

0

Я тоже сталкиваюсь с той же проблемой, заявляя, что UIDocumentInteractionController *docController обычно на @interface работал для меня!

@interface ViewController() 
{ 
UIDocumentInteractionController * docController; 
} 
@end 

- (void)sharePic:(UIImage *)image { 

NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; 
NSString *savedImagePath = [documentsDirectory stringByAppendingPathComponent:@"Image.ig"]; 
NSData *imageData = UIImageJPEGRepresentation(image, 0.8); 
[imageData writeToFile:savedImagePath atomically:YES]; 
NSURL *imageUrl = [NSURL fileURLWithPath:savedImagePath]; 

docController = [UIDocumentInteractionController interactionControllerWithURL:imageUrl]; 
[docController retain]; 
docController.UTI = @"com.instagram.exclusivegram"; 
docController.delegate = self; 
docController.annotation = [NSDictionary dictionaryWithObject:@"Caption Test" forKey:@"InstagramCaption"]; 
[docController presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES]; 
docController = nil; 
} 

Надеюсь, что это поможет! :)

Смежные вопросы