2012-10-26 1 views
7

UIActivityViewController를 사용하여 새 iOS 6 공유 기능을 내 앱에 추가하려고합니다. 공유하고 싶은 텍스트가 있습니다. 전자 메일을 선택하면 자동으로 전자 메일의 제목도 설정하려고합니다.UIActivityViewController 충돌, NSCFConstantString _beforeActivity 인스턴스로 전송 된 인식 할 수없는 선택자

[694:907] items=(
    "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas porttitor accumsan mi eu mollis. Fusce condimentum dictum lectus, eu ultrices urna vulputate eu." 
) 
[694:907] -[__NSCFConstantString _beforeActivity]: unrecognized selector sent to instance 0x3ad971c8 
[694:907] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFConstantString _beforeActivity]: unrecognized selector sent to instance 0x3ad971c8' 
*** First throw call stack: 
(0x35add2a3 0x37a1497f 0x35ae0e07 0x35adf531 0x35a36f68 0x361dc7a3 0x361dc52d 0x36067595 0x36434d31 0x3642fe07 0x2990b 0x361330ad 0x36133135 0x361330ad 0x3613305f 0x3613303d 0x361328f3 0x36132de9 0x3605b5f9 0x36048809 0x36048123 0x37bd15a3 0x37bd11d3 0x35ab2173 0x35ab2117 0x35ab0f99 0x35a23ebd 0x35a23d49 0x37bd02eb 0x3609c301 0x1ef9d 0x1ef30) 
libc++abi.dylib: terminate called throwing an exception 

내가 이것을 실행 해요 iOS6의와 아이 패드 2 : 여기

NSArray *activityItems = @[resultString]; 
NSLog(@"items=%@", activityItems); 

NSArray *acitivities = @[UIActivityTypeMail, UIActivityTypeMessage, UIActivityTypePrint, UIActivityTypePostToFacebook, UIActivityTypeCopyToPasteboard]; 

UIActivityViewController *activityController = 
    [[UIActivityViewController alloc] initWithActivityItems:activityItems 
             applicationActivities:activities]; 

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
    self.popover = [[UIPopoverController alloc] initWithContentViewController:activityController]; 
    // the line above is where the error happens. 
    [self.popover presentPopoverFromBarButtonItem:self.emailResultsButton permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
} else { 
    [self presentViewController:activityController 
         animated:YES 
        completion:nil]; 
} 

오류 메시지를 포함하여 코드의 출력입니다. 어떤 아이디어?

편집 : 내가 액티비티 배열을 제공하지 않으면 모든 것이 정상적으로 작동하는 것처럼 보입니다. 여전히 문제를 좁히고 있습니다.

+0

ARC를 해제해도 문제가 지속됩니까? (나는 예스라고 예측할 것입니다.) –

+0

ARC를 끄는 것은 스위치를 뒤집는 것과 같지 않습니다 ...하지만 계속 놀았습니다. 액티비티 배열을 제공하지 않으면 문제가 사라지는 것처럼 보입니다. –

+0

글쎄, 컴파일러 플래그를 일시적으로 해제하십시오. 기억 누출 걱정하지 마십시오. –

답변

16

예외는 모두 그것을 말한다 :

applicationActivities

:

NSArray *acitivities = @[UIActivityTypeMail, UIActivityTypeMessage, UIActivityTypePrint, UIActivityTypePostToFacebook, UIActivityTypeCopyToPasteboard]; 

문서는 방법은 UIActivity 객체의 목록을 기대 말한다 : 당신은 문자열의 배열에 전달하는

응용 프로그램에서 지원하는 사용자 지정 서비스를 나타내는 UIActivity 개체의 배열입니다. 이 매개 변수는 nil 일 수 있습니다.

이것은 사용자 정의에 대한 참고입니다. 예 : 기존 서비스에 DropBox 통합 기능을 추가로 제공하려는 경우

편집 : 활동 유형에 관해서는, 그들은 단지 UIActivity.activityType, UIActivityItemProvider.activityType, UIActivityViewController.excludedActivityTypes-[UIActivityItemSource activityViewController:itemForActivityType:]에 사용되는 것으로 나타났습니다.

+0

Aaaaand 우려 인스턴스에 적절한 가시를 전달하는 경우 확인하십시오! +1. –

+0

고마워요. 이제 Facebook이 왜 목록에 나타나지 않는지 알아야합니다. 아마도이 기기에서 Facebook에 로그인하지 않은 것 같습니다. –

+4

ObjC가 배열을 입력하여이 문제가 발생하지 않았 으면 좋겠습니다. NSArray 이 완전히 피했을 것입니다. –