2014-06-19 1 views
0

XPC를 사용하여 프로젝트를 두 개의 프로젝트, 즉 os x 64 비트 용으로 빌드 된 기본 프로젝트와 os x 용으로 빌드 된 XPC 서비스로 구분합니다. 32 비트 용으로 사용할 수없고 대체 할 수없는 라이브러리를 사용하므로 32 비트입니다. 두 가지는 NSXPCConnection을 사용하여 통신합니다.NSXPCConnection에서 null이 아닌 매개 변수를 전달할 때 응용 프로그램 응답이 호출되지 않음

나는 주요 응용 프로그램에 서비스에서 콜백에 문제가 (: nsimage 같은 클래스 나있는 NSData 즉), 그것은하지 다시 XPC 서비스에서 호출
는 응답은 복잡한 인수를 취한다 때. 오류나 예외는 없으며 단순히 아무 일도 일어나지 않습니다. 이것은 또한 때때로 다른 방식으로, 즉 프록시 객체를 호출 할 때 발생한다. 무작위로 발생하는 것은 아니지만 어떤 답장 서명에 대해서만 발생합니다.

xpc 서비스와 기본 앱 사이에 nsimage를 어떤 식 으로든 전달해야합니다. 나는 NSImage와 NSData를 모두 통과 시키려고했으나 응답은 호출되지 않았다. (언급 할 가치가있다. 실제 객체 대신 nil이 전달 될 때 호출된다.)

[NSData 바이트]를 사용하여 포인터를 보내고 [NSData initWithData : length :]를 사용하여 데이터를 다시 만들려고했습니다. 이걸 시도하면 응답이 호출되지만 initWithData를 호출 할 때 EXC_BAD_ACCESS가 발생합니다. 나는 이것이 32 비트와 64 비트 어드레싱 사이에 혼란이 있다고 가정합니다.

몇 가지 코드 샘플 : 응답이 nsimage 소요

:에서 호출

- (void)getImageWithReply:(void (^)(NSImage *image))reply; 

응답 :

수출 인터페이스

- (void)getImageReply:(void (^)(NSImage *image))reply 
{ 
    //We always re-render. The responsibility to not re-render when not needed will be passed on. 
    [self render]; //updates puts in local var mRenderBuffer the render data 
    reply(nil, NO); 
    NSImage *image = ... //init image. it is being inited correctly, i know that 
    reply(image); 

}' 
을 응답 데이터에 PTR 소요

:에서

수출 인터페이스

typedef long long XPC_PTR; //As void* has different sizes in 32/64bit env. 
- (void)getRenderBufferWithReply:(void (^)(XPC_PTR ptr, uint size))reply; 

응답 호출 : 모든 객체는 연결을 통해 전달 된 것으로 보인다

- (void)getRenderBufferWithReply:(void (^)(READER_PTR ptr, uint size))reply 
{ 
    [self render]; 
    reply((XPC_PTR)[mRenderBuffer bytes], mRenderWidth * mRenderHeight * BYTES_PER_PIXEL, YES); 
} 

답변

0

해야 NSImage가 준수하지 않는 NSSecureCoding 프로토콜을 준수합니다.

NSData는이 프로토콜을 준수하며 이제는 연결을 통해 전달합니다. NSData를 이전에 시도했을 때 작동하지 않는 이유는 확실하지 않습니다. 전송 된 데이터를 사용하여 주 프로세스에서 NSImage를 생성합니다.

포인터를 보내려고하면 서비스와 메인 앱이 자연스럽게 다른 프로세스로 실행되므로 서로 다른 실제 메모리 공간에 매핑되므로 포인터를 보내려는 시도가 어리석은 시도였습니다.

0

NSImage가 NSSecureCoding 프로토콜에

@ 인터페이스의 NSImage 따르지 않습니다

요점은 무엇인가 그래서 확실하지 NSObject의

를?

관련 문제