2012-08-03 9 views
7

DÜZENLEME: Şekil çıktı! URL'nin mutlakStringini kaydediyordum ve ses oynatıcısını başlatmaya çalıştığımda [NSURL fileURLWithPath: name] kullandım; [NSURL urlWithString: name] olması gerektiği zaman. Başka bir fileURLWithPath oluşturarak yolu değiştiriyordu ve işe yaramayacaktı. Bunu sanırım bazı örnek kod için bırakacağım!Temel veride kaydın url kaydetme, ancak daha sonra kullanmayı denediğimde çalışmaz

Tamam, bu yüzden uyguladığımdan kullanıcıdan kaydedilmiş bir ses parçam var. Kullanıcının bu kayıtları kaydedebilmesini istiyorum, bu yüzden kaydın url dizisini çekirdek verilere kaydetmem, URL'yi getirmem ve bu URL ile bir AVAudioPlayer yüklemem gerektiğini düşündüm. Ama işe yaramıyor.

Beni verir:

Error in audioPlayer: The operation could not be completed. 

Bu URL NSString:

file://localhost/file:/localhost/var/mobile/Applications/E09081DE-434F-46CA-A598- 
A2470973C0F1/Documents/Rang%2520De%2520sound.caf 

Ben o localhost içinde kaydeder gerçeği ile ilgisi vardır duygu ettim ve Ses oynatıcısını başlatmaya çalışırken bu dosyaya gerçekten erişemiyorum. Ama emin değilim. URL’ye hemen erişilebileceğini biliyorum, çünkü kaydettikten sonra kaydı bu URL’yi kullanarak oynayabiliyorum.

Ben Kaydı saklıyorum nasıl

:

- (IBAction)saveRecording 
{ 
    rapAppDelegate *appDelegate = 
    [[UIApplication sharedApplication] delegate]; 

    NSManagedObjectContext *context = 
    [appDelegate managedObjectContext]; 
    NSManagedObject *newSong; 
    newSong = [NSEntityDescription 
        insertNewObjectForEntityForName:@"URLRecordings" 
        inManagedObjectContext:context]; 
    NSError *error; 

    NSURL *urlOfRecording = audioRecorder.url; 
    NSString *urla = [urlOfRecording absoluteString]; 
    NSLog(@"in saveRecording, the url is: %@",urla); 
    [newSong setValue:urla forKey:@"urlOfSong"]; 
    [context save:&error]; 
    status.text = @"Song Saved!"; 
} 

bunu getir, URL değişiklikleri! Ben neden anlamıyorum! Bak:

2012-08-03 16:31:17.434 Rap To Beats[5054:707] in saveRecording, the url is: file://localhost/var/mobile/Applications/E09081DE-434F-46CA-A598-A2470973C0F1/Documents/Le%20Gayi%20sound.caf 

2012-08-03 16:31:24.381 Rap To Beats[5054:707] after fetch, the url is: file://localhost/file:/localhost/var/mobile/Applications/E09081DE-434F-46CA-A598-A2470973C0F1/Documents/Le%2520Gayi%2520sound.caf 

Le% 20'den Le% 2520'ye çıktı! Tekrar kaydetmedim ya da sadece aynı diziyi temel veriye kaydettim ve getirdim! Başlangıçta localhost'ta da bir değişiklik var.

O zaman bu onu alma ediyorum nasıl: Bu adamlar nasıl giderileceği ile ilgili

rapAppDelegate *appDelegate = 
    [[UIApplication sharedApplication] delegate]; 

    NSManagedObjectContext *context = 
    [appDelegate managedObjectContext]; 

    NSEntityDescription *entityDesc = 
    [NSEntityDescription entityForName:@"URLRecordings" 
       inManagedObjectContext:context]; 

    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 

    [request setEntity:entityDesc]; 
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] 
             initWithKey:@"urlOfSong" ascending:NO]; 
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
    [request setSortDescriptors:sortDescriptors]; 
    NSError *error = nil; 
    NSMutableArray *mutableFetchResults = [[context 
              executeFetchRequest:request error:&error] mutableCopy]; 
    if (mutableFetchResults == nil) { 
     // Handle the error. 
    } 

    [self setUrlArray:mutableFetchResults]; 

Herhangi bir yardım? Eğer localhost ile ilgisi varsa, o zaman başka bir yere nasıl kaydederim?

İşte kaydedildiği yere kod: Bu soru uzunluğu için

NSArray *dirPaths; 
    NSString *docsDir; 

    dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    docsDir = [dirPaths objectAtIndex:0]; 
    NSString *name = self.beatName.text; 
    NSString *soundFilePath1 = [docsDir 
           stringByAppendingPathComponent:name]; 
    NSString *soundFilePath = [soundFilePath1 
           stringByAppendingString:@" sound.caf"]; 
    NSLog(@"in viewDidLoad, the url is: %@",soundFilePath); 
    NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath]; 

    NSDictionary *recordSettings = [NSDictionary 
            dictionaryWithObjectsAndKeys: 
            [NSNumber numberWithInt:AVAudioQualityMin], 
            AVEncoderAudioQualityKey, 
            [NSNumber numberWithInt:16], 
            AVEncoderBitRateKey, 
            [NSNumber numberWithInt: 2], 
            AVNumberOfChannelsKey, 
            [NSNumber numberWithFloat:44010.0], 
            AVSampleRateKey, 
            nil]; 

    NSError *error = nil; 

    audioRecorder = [[AVAudioRecorder alloc] 
        initWithURL:soundFileURL 
        settings:recordSettings 
        error:&error]; 

    if (error) 
    { 
     NSLog(@"error: %@", [error localizedDescription]); 

    } else { 
     [audioRecorder prepareToRecord]; 
    } 

Maalesef sadece mümkün olduğunca yardımcı olmaya ve sorunun çözümüne yardımcı ne olursa olsun kod koymak istiyorum. Yanlış yaptığım başka bir şey varsa bana bildirin! Teşekkürler çocuklar!

+0

Protokol konusunda, cevabınızı kopyalayıp yanıt olarak göndermeniz ve daha sonra bu soruyu kapatmak için onaylayın (seçin). –

+0

tamam, bunu yapacağım! – gg13

cevap

8

Figured out out! URL'nin absoluteString kodunu kaydediyordum ve ses oynatıcısını başlatmayı denediğimde, [NSURL URLWithString:name] olması gerektiğinde [NSURL fileURLWithPath:name] kullanmıştım. Başka bir fileURLWithPath oluşturarak yolu değiştiriyordu ve işe yaramayacaktı. Bunu sanırım bazı örnek kod için bırakacağım!

İlgili konular