2012-05-10 13 views
0

私はiPad2の上で完璧に動作しているアプリがありますが、私はsymbolicatedしているため、iPadの3のAppは、iPad 2の上でのiPad 3にクラッシュしていないが - クラッシュログ

にクラッシュにアップル社によって拒否されましたクラッシュログを作成し、クラッシュを以下の方法に絞り込んだ。次のように

-(void)mergeTwoVideos { 

//AVExport (oddly) has a problem with file name already existing - therefore check if file already exists and delete if needed. 
NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *writablePath = [documentsDirectory stringByAppendingPathComponent:@"FinishedVideo.mov"]; 

if([fileManager fileExistsAtPath:writablePath]){ 
    NSLog(@"Problem - file already exists"); 
    [fileManager removeItemAtPath:writablePath error:NULL]; 
} 
else{ 
    NSLog(@"No Problem - New File"); 
} 

//Instantiate AVMutable Composition. 

CMTime nextClipStartTime = kCMTimeZero; 

AVURLAsset* a_videoAsset = [AVURLAsset URLAssetWithURL: [assetURLArray objectForKey:kIntroVideo] options:nil]; 

AVMutableComposition* mixComposition = [AVMutableComposition composition]; 

CMTimeRange a_timeRange = CMTimeRangeMake(kCMTimeZero,a_videoAsset.duration); 
AVMutableCompositionTrack *a_compositionVideoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; 
AVMutableCompositionTrack *compositionAudioTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid]; 


[a_compositionVideoTrack insertTimeRange:a_timeRange ofTrack:[[a_videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:nextClipStartTime error:nil]; 

nextClipStartTime = CMTimeAdd(nextClipStartTime, a_timeRange.duration); 

AVURLAsset* b_videoAsset = [AVURLAsset URLAssetWithURL: [assetURLArray objectForKey:kMainVideo] options:nil]; 

CMTimeRange b_timeRange = CMTimeRangeMake(kCMTimeZero, b_videoAsset.duration); 
[a_compositionVideoTrack insertTimeRange:b_timeRange ofTrack:[[b_videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:nextClipStartTime error:nil]; 
[compositionAudioTrack insertTimeRange:b_timeRange ofTrack:[[b_videoAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] atTime:nextClipStartTime error:nil]; 

nextClipStartTime = CMTimeAdd(nextClipStartTime, b_videoAsset.duration); 

AVURLAsset* c_videoAsset = [AVURLAsset URLAssetWithURL: [assetURLArray objectForKey:kIntroVideo] options:nil]; 
CMTimeRange c_timeRange = CMTimeRangeMake(kCMTimeZero, c_videoAsset.duration); 
[a_compositionVideoTrack insertTimeRange:c_timeRange ofTrack:[[c_videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:nextClipStartTime error:nil]; 

AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPresetMediumQuality]; 

NSString *exportVideoPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/FinishedVideo.mov"]; 

NSURL *exportURL = [NSURL fileURLWithPath:exportVideoPath]; 
exportSession.outputURL = exportURL; 
exportSession.shouldOptimizeForNetworkUse = YES; 
exportSession.outputFileType = AVFileTypeQuickTimeMovie; 

[exportSession exportAsynchronouslyWithCompletionHandler:^{ 
    switch (exportSession.status) { 
     case AVAssetExportSessionStatusFailed:{ 
      NSLog (@"FAIL"); 
      break; 
     } 
     case AVAssetExportSessionStatusCompleted: { 
      NSLog (@"SUCCESS"); 
      [exportSession release]; 
      [self finishMergingProcess]; 
} 
}; 
}]; 

}

symbolicatedクラッシュログは次のとおりです。

Thread 4 name: Dispatch queue: com.apple.root.default-priority 
Thread 4 Crashed: 
0 libsystem_kernel.dylib   0x36d4832c __pthread_kill + 8 
1 libsystem_c.dylib    0x3173a208 pthread_kill + 48 
2 libsystem_c.dylib    0x31733298 abort + 88 
3 libc++abi.dylib     0x36c10f64 abort_message + 40 
4 libc++abi.dylib     0x36c0e346 _ZL17default_terminatev + 18 
5 libobjc.A.dylib     0x3682b350 _objc_terminate + 140 
6 libc++abi.dylib     0x36c0e3be _ZL19safe_handler_callerPFvvE + 70 
7 libc++abi.dylib     0x36c0e44a std::terminate() + 14 
8 libc++abi.dylib     0x36c0f798 __cxa_throw + 116 
9 libobjc.A.dylib     0x3682b290 objc_exception_throw + 88 
10 CoreFoundation     0x31f1f9d4 -[__NSArrayM objectAtIndex:] + 264 
11 AppName       0x00023d6e -[ViewController mergeTwoVideos]  (ViewController.m:746) 
12 libdispatch.dylib    0x31eb4c52 _dispatch_call_block_and_release + 6 
13 libdispatch.dylib    0x31eb7810 _dispatch_worker_thread2 + 252 
14 libsystem_c.dylib    0x316f5df4 _pthread_wqthread + 288 
15 libsystem_c.dylib    0x316f5cc8 start_wqthread + 0 

誰もがiPadの3にこのクラッシュを引き起こしているものに任意の洞察力を提供することはできますか?私は自分自身をテストするためにiPad3を所有していないので、どんな助けにも感謝します。

ありがとうございました!

+0

746はどちらですか?クラッシュメッセージはありますか? – zaph

+0

[a_compositionVideoTrack insertTimeRange:a_timeRange ofTrack:[[a_videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:nextClipStartTimeエラー:nil]; – GuybrushThreepwood

+0

クラッシュ・メッセージが例外タイプです:EXC_CRASH(SIGABRT) – GuybrushThreepwood

答えて

4

配列にその数の要素がないNSArrayからインデックスでオブジェクトを取得しようとしています。

objectAtIndex:0の番号を指定すると、配列が空でもなくても最初から何か問題が起きている可能性があります。

URLが正しいこと、アセットがロードされていること、ビットとアセットのアセットが予想されていることを確認するコードの検証がないことを考慮すると、そのコードには数十の潜在的な障害点があります。

全体を守るためにコードを修正する必要があります。空の配列をチェックし、URLのロード失敗などを確認してください。

関連する問題