Note that there are some explanatory texts on larger screens.

plurals
  1. POApplication crashed while importing songs from Ipod library in Iphone for iOs 5.0
    primarykey
    data
    text
    <p>Hello i am using below framworks,</p> <pre><code>#import &lt;MediaPlayer/MediaPlayer.h&gt; #import &lt;AudioToolbox/AudioToolbox.h&gt; #import &lt;AVFoundation/AVFoundation.h&gt; </code></pre> <p>In one of button event i have implemented below code to open Library.</p> <pre><code> MPMediaPickerController *mediaPicker = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeMusic]; mediaPicker.delegate = self; mediaPicker.allowsPickingMultipleItems = YES; // this is the default [self presentModalViewController:mediaPicker animated:YES]; [mediaPicker release]; </code></pre> <p>And in delegate methods of MPMediaPickerController implemented code as below</p> <pre><code>#pragma mark MPMediaPickerController delegate methods - (void)mediaPicker: (MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection { // We need to dismiss the picker [self dismissModalViewControllerAnimated:YES]; // Assign the selected item(s) to the music player and start playback. counterIpod = [mediaItemCollection.items count]; totalcollection = counterIpod; if (totalcollection &gt; 10) { NSString *str = [NSString stringWithFormat:@"BRL Only supports importing 10 songs at a time"]; UIAlertView *connectionAlert = [[UIAlertView alloc] initWithTitle:@"Message !" message:str delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; [connectionAlert show]; [connectionAlert release]; } else { [self performSelector:@selector(saveMediaItem:) withObject:mediaItemCollection afterDelay:0.1]; //[self saveMediaItem:mediaItemCollection]; //[self showLoadingView]; } } - (void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker { // User did not select anything // We need to dismiss the picker [self dismissModalViewControllerAnimated:YES]; } #pragma mark Sace Item Collection to documentsDirectory -(void)saveMediaItem:(MPMediaItemCollection *)mediaItemCollection { for (int i = 0; i &lt; [mediaItemCollection.items count]; i++) { [self exportAssetAsSourceFormat:[[mediaItemCollection items] objectAtIndex:i]]; NSLog(@"for loop : %d", i); } NSArray *itemsArray1 = appDelegate.mediaItemCollection1.items; MPMediaItemCollection *mediaItemCollection2; if ([itemsArray1 count] != 0) { mediaItemCollection2 = [self collectionByAppendingCollection:mediaItemCollection]; } else { mediaItemCollection2 = mediaItemCollection; } [self saveMediaItemAfterDeletting:mediaItemCollection2]; } -(void)saveMediaItemAfterDeletting:(MPMediaItemCollection *)mediaItemCollection { NSMutableData* data = [[NSMutableData alloc] init]; NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; [archiver encodeObject:mediaItemCollection forKey:@"my_playlist"]; [archiver finishEncoding]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *filePath = [NSString stringWithFormat:@"%@/playlist.data", documentsDirectory]; NSLog(@"file path = %@", filePath); [data writeToFile:filePath atomically:YES]; if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]){ NSLog(@"file exists : ===========&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;"); } else { NSLog(@"file doesn't exist"); } //NSLog(@"archiving playlist success = %d", success); [archiver release]; [data release]; [self UpdateMediaCollection]; } -(NSString*) getExtension:(MPMediaItem *)item { // [self showLoadingView]; NSURL *assetURL = [item valueForProperty:MPMediaItemPropertyAssetURL]; AVURLAsset *songAsset = [AVURLAsset URLAssetWithURL:assetURL options:nil]; // JP // AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] // initWithAsset:songAsset // presetName:AVAssetExportPresetPassthrough]; NSArray *tracks = [songAsset tracksWithMediaType:AVMediaTypeAudio]; AVAssetTrack *track = [tracks objectAtIndex:0]; id desc = [track.formatDescriptions objectAtIndex:0]; const AudioStreamBasicDescription *audioDesc = CMAudioFormatDescriptionGetStreamBasicDescription((CMAudioFormatDescriptionRef)desc); FourCharCode formatID = audioDesc-&gt;mFormatID; //exportAudioMix.inputParameters = [NSArray arrayWithObject:exportAudioMixInputParameters]; //exportSession.audioMix = exportAudioMix; NSString *fileType = nil; NSString *ex = nil; switch (formatID) { case kAudioFormatLinearPCM: { UInt32 flags = audioDesc-&gt;mFormatFlags; if (flags &amp; kAudioFormatFlagIsBigEndian) { fileType = @"public.aiff-audio"; ex = @"aif"; } else { fileType = @"com.microsoft.waveform-audio"; ex = @"wav"; } } break; case kAudioFormatMPEGLayer3: fileType = @"com.apple.quicktime-movie"; ex = @"mp3"; break; case kAudioFormatMPEG4AAC: fileType = @"com.apple.m4a-audio"; ex = @"m4a"; break; case kAudioFormatAppleLossless: fileType = @"com.apple.m4a-audio"; ex = @"m4a"; break; default: break; } return ex; } #pragma mark Covert Item separate item collection and store songs into directory - (void)exportAssetAsSourceFormat:(MPMediaItem *)item { // [self showLoadingView]; NSLog(@"export asset called"); NSURL *assetURL = [item valueForProperty:MPMediaItemPropertyAssetURL]; NSLog(@"\n&gt;&gt;&gt;&gt; assetURL : %@",[assetURL absoluteString]); AVURLAsset *songAsset = [AVURLAsset URLAssetWithURL:assetURL options:nil]; // JP AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:songAsset presetName:AVAssetExportPresetPassthrough]; NSArray *tracks = [songAsset tracksWithMediaType:AVMediaTypeAudio]; AVAssetTrack *track = [tracks objectAtIndex:0]; id desc = [track.formatDescriptions objectAtIndex:0]; const AudioStreamBasicDescription *audioDesc = CMAudioFormatDescriptionGetStreamBasicDescription((CMAudioFormatDescriptionRef)desc); FourCharCode formatID = audioDesc-&gt;mFormatID; //exportAudioMix.inputParameters = [NSArray arrayWithObject:exportAudioMixInputParameters]; //exportSession.audioMix = exportAudioMix; NSString *fileType = nil; NSString *ex = nil; switch (formatID) { case kAudioFormatLinearPCM: { UInt32 flags = audioDesc-&gt;mFormatFlags; if (flags &amp; kAudioFormatFlagIsBigEndian) { fileType = @"public.aiff-audio"; ex = @"aif"; } else { fileType = @"com.microsoft.waveform-audio"; ex = @"wav"; } } break; case kAudioFormatMPEGLayer3: fileType = @"com.apple.quicktime-movie"; ex = @"mp3"; break; case kAudioFormatMPEG4AAC: fileType = @"com.apple.m4a-audio"; ex = @"m4a"; break; case kAudioFormatAppleLossless: fileType = @"com.apple.m4a-audio"; ex = @"m4a"; break; default: break; } exportSession.outputFileType = fileType; NSString *fileName = nil; fileName = [NSString stringWithString:[item valueForProperty:MPMediaItemPropertyTitle]]; fileName = [[fileName stringByAppendingString:@"-"] stringByAppendingString:[item valueForProperty:MPMediaItemPropertyArtist]]; NSArray *fileNameArray = nil; fileNameArray = [fileName componentsSeparatedByString:@" "]; fileName = [fileNameArray componentsJoinedByString:@""]; NSLog(@"&gt;&gt;&gt;&gt;&gt; fileName = %@", fileName); NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString *filePath = [[docDir stringByAppendingPathComponent:fileName] stringByAppendingPathExtension:ex]; NSLog(@"filePath = %@", filePath); if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { //NSLog(@"file exist::::::::::==============&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;"); counterIpod--; if(counterIpod == 0) { //[self showAlertView]; //[self hideLoadingView]; } NSString *str = [NSString stringWithFormat:@"Loading %d of %d Beats", totalcollection - counterIpod ,totalcollection]; [lbl performSelectorOnMainThread:@selector(setText:) withObject:str waitUntilDone:NO]; //NSLog(@"loading string : %@", str); return; } //NSLog(@"file not exist ===========&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;"); // ------------------------------------- int fileNumber = 0; NSString *fileNumberString = nil; NSString *fileNameWithNumber = nil; while ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { fileNumber++; fileNumberString = [NSString stringWithFormat:@"-%02d", fileNumber]; fileNameWithNumber = [fileName stringByAppendingString:fileNumberString]; filePath = [[docDir stringByAppendingPathComponent:fileNameWithNumber] stringByAppendingPathExtension:ex]; //NSLog(@"filePath = %@", filePath); } // ------------------------------------- myDeleteFile(filePath); exportSession.outputURL = [NSURL fileURLWithPath:filePath]; [exportSession exportAsynchronouslyWithCompletionHandler:^{ if (exportSession.status == AVAssetExportSessionStatusCompleted) { NSLog(@"export session completed"); counterIpod--; NSString *str = [NSString stringWithFormat:@"Loading %d of %d Beats", totalcollection - counterIpod ,totalcollection]; //[self performSelector:@selector(setLabelText:) withObject:str afterDelay:0.02]; [lbl performSelectorOnMainThread:@selector(setText:) withObject:str waitUntilDone:NO]; NSLog(@"loading string : %@", str); if(counterIpod == 0) { //[self showAlertView]; //[self hideLoadingView]; } } else { NSLog(@"export session error"); counterIpod--; NSString *str = [NSString stringWithFormat:@"Loading %d of %d Beats", totalcollection - counterIpod ,totalcollection]; [lbl performSelectorOnMainThread:@selector(setText:) withObject:str waitUntilDone:NO]; //return NO; if(counterIpod == 0) { //[self showAlertView]; //[self hideLoadingView]; } } [exportSession release]; }]; //[appDelegate hideLoadingView]; } #pragma mark method to delete file from document directory void myDeleteFile (NSString* path) { // NSLog(@"file path delete file :::::::::: %@", path); if ([[NSFileManager defaultManager] fileExistsAtPath:path]) { NSError *deleteErr = nil; [[NSFileManager defaultManager] removeItemAtPath:path error:&amp;deleteErr]; if (deleteErr) { NSLog (@"Can't delete %@: %@", path, deleteErr); } } } </code></pre> <p>Above code work without any error on iOs 4.0 or later version but for iOs 5.0 is crashes on device, i can't resolve these issues since last 15 days.</p> <p>Thanks in advance for Help.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload