2013-07-23 1 views
2

이 주제에 대해 게시 된 각 질문을 살펴 보았지만 해결 방법을 찾지 못했습니다. 내 프로젝트는 dev 라이브러리에서 AVPlayer 데모 응용 프로그램을 광범위하게 복제합니다 (제거 기능 제외). 클래스 (이름이 YOPlaybackView로 바뀜)와 연결된 컨트롤러가 있고 매우 유사한 xib (제거기 제외). 내보기 컨트롤러 코드는 데모의 패턴과 매우 유사합니다 (코드 차이는 간략히하기 위해 아래에 게시 됨).또 다른 - "인스턴스로 보내지는 인식 할 수없는 셀렉터"문제

는 내가보기 컨트롤러를 확보 한
    • 내가보기 컨트롤러가 dealloc

      에 중단 점을 넣어 유효한 인스턴스 인 것을 확인했다
    • 중복되지 않았는지 콘센트을 한

    • 파일의 소유자
    • 입니다

      플레이어의 현재 항목이 변경되거나 변경되면 observeValueForKeyPath 메서드에서 오류가 발생합니다. "- [UIView의 SetPlayer :]"다음 줄 오류 준다 난 그냥 이전이 호출에 해당 뷰의 인스턴스를 생성하는 경우, 인식 할 수없는 선택기 인스턴스에 전송 ... "

      [playbackView setPlayer:player]; 
      

    을 나는 돈

     YOPlaybackView* vw = [[YOPlaybackView alloc] init]; 
         [playbackView setPlayer:player]; 
    

    펜촉 게으른 로딩 함께 할 수있는 뭔가가 될 수 있음을 날 것으로 보인다 (및 인스턴스를 생성하는 것은 삶에 차기)

    디버거 창에서 보면 '는 t는 오류가 발생합니다. playbackView는 (사용되지 않은) 인스턴스를 생성하는 추가 행을 사용하거나 사용하지 않고 유효해야합니다.

    enter image description here

    사람이 내 객체/응용 프로그램 라이프 사이클 지식을하시기 바랍니다 진행 도와 드릴까요?


    편집 - IB 코멘트

    을 포함하는 제안 된 답변에 대한 응답으로 이것은 관리자의 뷰 계층 및 올바른 이름의 사용자 정의보기를 보여주는 IB의 스냅입니다. enter image description here

    편집 - 응답 유효 SetPlayer에 대해 의문을 제기하는 문제의 클래스는 다음과 같습니다

    뷰 :

    @class AVPlayer; 
    
    @interface YOPlaybackView : UIView 
    @property (nonatomic, retain) AVPlayer* player; 
    - (void)setPlayer:(AVPlayer*)player; 
    @end 
    

    및 IMPL :

    @implementation YOPlaybackView 
    
    + (Class)layerClass 
    { 
        return [AVPlayerLayer class]; 
    } 
    
    - (AVPlayer*)player 
    { 
        return [(AVPlayerLayer*)[self layer] player]; 
    } 
    
    - (void)setPlayer:(AVPlayer*)player 
    { 
        [(AVPlayerLayer*)[self layer] setPlayer:player]; 
    } 
    
    @end 
    

    편집 - 출력 로그

    2013-07-23 12:05:39.084 iOSVideoPlayerExample[8331:14003] Unknown class YOPlaybackView in Interface Builder file. 
    2013-07-23 12:05:39.956 iOSVideoPlayerExample[8331:14003] Unbalanced calls to begin/end appearance transitions for <YOMasterViewController: 0x985aa10>. 
    2013-07-23 12:05:40.428 iOSVideoPlayerExample[8331:14003] <UIView: 0x8383900; frame = (0 0; 320 480); autoresize = W+H; layer = <CALayer: 0x8381710>> 
    2013-07-23 12:05:40.429 iOSVideoPlayerExample[8331:14003] -[UIView setPlayer:]: unrecognized selector sent to instance 0x8383900 
    (lldb) 
    
  • +0

    ''YOPlaybackView' 서브 클래스에 유효한'setPlayer' 메소드가 있습니까? – Rog

    +0

    지금 첨부 할 수 있습니다. – johnyu

    +0

    클래스 선언 및 구현을 편집 - 감사에 추가했습니다. – eggfish

    답변

    1

    당신의 playbackViewsetPlayer:라는 방법이없는 UIView의 인스턴스로 나타납니다. 자신의 하위 클래스 인 UIView의 인스턴스를 만들고 있는지 확인하십시오.playbackView을 만드는 코드 스 니펫을 게시 할 수 있습니까?

    인터페이스 빌더를 사용하는 경우 관리자에서 올바른 클래스를 설정했는지 확인하십시오.

    코드의 어딘가에서 클래스를 참조해야합니다. setPlayer: 호출 바로 위에 [YOPlaybackView class]을 추가하십시오.

    +0

    예 IB를 사용하고 있습니다. 하위 뷰 (YOPlaybackView - 관리자가 설정)가있는 최상위 뷰 (UIView)가 있습니다. 내 파일 소유자가 내 사용자보기 컨트롤러로 변경되고 콘센트가 올바르게 표시됩니다 (이중 선택). IB의 스냅 샷을 추가했습니다. – eggfish

    +1

    setPlayer 호출 바로 전에 NSLog (@ "% @", playbackView);를 추가하고 출력을 게시 할 수 있습니다. – FelixLam

    +0

    이제 어딘가로 이동하여 질문에 대한 편집으로 추가됩니다. IB 파일이 YOPlaybackView 클래스가 무엇인지 알지 못하는 것 같습니다. (http://stackoverflow.com/questions/1725881/unknown-class-myclass-in-interface-builder-file-error-at-runtime) – eggfish

    0

    @ FelixLam의 매우 유용한 조언을 사용하여 더 많은 로그 출력 데이터를 얻을 수있었습니다.이 데이터는 이제 질문의 세 번째 편집으로 삽입됩니다. 첫 번째 라인 출력은 인터페이스 빌더가 내 사용자 정의보기 클래스가 무엇인지 알지 못한다고 표시합니다. 사이트에서 약간의 검색을 통해이 문제에 대한 대답을 보았습니다. ("Unknown class <MyClass> in Interface Builder file" error at runtime) - 제 질문에 대한 답변이기도합니다.

    요약하면 링커에서 "-ObjC"플래그를 프로젝트에 추가해야 링커가 클래스 멤버를로드해야합니다.

    +0

    수정 된 답변에서보다 세분화 된 접근 방식. – FelixLam

    +0

    안녕하세요 @ FelixLam, 다시 한번 도움을 주셔서 감사합니다. 내 이해를 돕기 위해 귀하의 제안을 왜 추가했는지 설명 할 수 있습니까? "[YOPlaybackView class]"가 inker 플래그 -ObjC를 추가하는 것보다 더 나은 해결책입니까? 모든 것을로드하지 않도록 효율성을 위해서입니까? 감사합니다. – eggfish

    +0

    이것은 바이너리가 작아지고 모든 것을로드하는 것을 방지합니다. http://stackoverflow.com/questions/6629979/what-does-the-objc-linker-flag-do – FelixLam

    관련 문제