2014-10-14 3 views
2

AVAssetResourceLoaderDelegate를 구현하려고했지만 지금까지 대리인을 성공적으로 설정할 수 없어 대리인 코드가 호출되지 않습니다.AVAssetResourceLoader 대리자가 설정되지 않음

AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:nil]; 
[asset.resourceLoader setDelegate:[[MyAssetResourceLoaderDelegateCode alloc] init] 
          queue:queue]; 
NSLog(@"Delegate: %@", asset.resourceLoader.delegate); 

이 코드는 항상 Delegate: (null)을 인쇄 :

이를 생각해 보자. 대리인이 설정을 거부 할 때 대리인을 어떻게 설정합니까? 내가 뭘 놓치고 있니?

이 시뮬레이터와 아이폰 OS 8

답변

1

당신이 AVAssetResourceLoaderDelegate 프로토콜을 채택해야하는이 객체에 연결 대리자를 실행하는 아이폰 5S에 발생합니다. 그래서 코드는 다음과 같이해야합니다 :

@interface YourClass() <AVAssetResourceLoaderDelegate> 
@end 

@implementation YourClass 

- (void)someMethod 
{ 
    NSURL *url = [NSURL URLWithString:@"...."]; 
    AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:nil]; 
    [asset.resourceLoader setDelegate:self queue:queue]; 
} 

#pragma mark - AVAssetResourceLoaderDelegate methods 

- (BOOL)resourceLoader:(AVAssetResourceLoader *)resourceLoader shouldWaitForLoadingOfRequestedResource:(AVAssetResourceLoadingRequest *)loadingRequest 
{ 

} 

@end 

또는

당신이 어딘가에 당신이 만든 객체 MyAssetResourceLoaderDelegateCode에 강한 참조를 유지하고 대리자로 전달해야 할 별도의 위임 MyAssetResourceLoaderDelegateCode이있는 경우

. [asset.resourceLoader setDelegate : 할 때 ... resourceLoader 그냥 만든 개체에 약한 참조가 있습니다. 코드는 다음과 같을 수 있습니다 :

@property (nonatomic, strong) MyAssetResourceLoaderDelegateCode *assetObject; 

self.assetObject = [MyAssetResourceLoaderDelegateCode new]; 

[asset.resourceLoader setDelegate:self.assetObject ...]; 
+0

있습니다. 내 예에서'MyAssetResourceLoaderDelegateCode'는'AVAssetResourceLoaderDelegate' 프로토콜과 그 메소드를 모두 공개적으로 구현합니다.이 메소드는 현재 로그 명령문과 중단 점을 호출하여 호출되는지 여부를 확인합니다. – MxSagan

+0

님이 답변을 – kabarga

+0

업데이트했습니다. 대리인은 강력한 참조가 아니므로 dealloc'd를 얻고있었습니다. 이제 대리자가 올바르게 설정되지만 대리자 개체는 여전히 대리자의 메서드에 대한 메시지를받지 못합니다. 어떤 아이디어? – MxSagan

관련 문제