2012-08-03 5 views
7

EDIT: Es herausgefunden! Ich habe den AbsoluteString der URL gespeichert, und als ich versucht habe, den Audio Player zu initialisieren, habe ich [NSURL fileURLWithPath: name]; wenn es [NSURL urlWithString: name] hätte sein sollen. Durch das Erstellen einer anderen fileURLWithPath wurde der Pfad geändert und würde nicht funktionieren. Ich werde das für einige Beispielcode lassen, denke ich!Speichern der Url der Aufnahme in den Kerndaten, aber funktioniert nicht, wenn ich versuche, es später zu verwenden

Okay, also habe ich eine Audioaufnahme vom Benutzer in meiner App aufgenommen. Ich möchte, dass der Benutzer diese Aufzeichnungen speichern kann, also dachte ich, ich sollte die Zeichenkette der URL der Aufzeichnung in Kerndaten speichern, die URL holen und einen AVAudioPlayer mit dieser URL laden. Aber es funktioniert nicht.

Es gibt mir:

Error in audioPlayer: The operation could not be completed. 

Dies ist der NSString der URL:

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

Ich habe das Gefühl, es hat etwas mit der Tatsache zu tun hat, dass es in localhost speichert, und ich kann nicht auf diese Datei zugreifen, wenn versucht wird, den Audio-Player zu initialisieren. Aber ich bin mir nicht sicher. Ich weiß, dass die URL sofort aufgerufen werden kann, denn nach der Aufnahme kann ich die Aufnahme mit dieser URL wiedergeben.

Wie spare ich die Aufnahme:

- (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!"; 
} 

Wenn ich es holen, die URL ändert! Ich verstehe nicht warum! Aussehen:

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 

Es ging von Le% 20 zu Le% 2520! Ich habe nicht neu aufgenommen oder irgendetwas habe ich einfach die gleiche Zeichenfolge in den Kerndaten gespeichert und es abgerufen! Es gibt auch einige Änderungen am lokalen Host zu Beginn.

Dann ist dies, wie ich es bin holen:

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]; 

Jede Hilfe, wie diese Jungs zu beheben? Wenn es mit dem localhost zu tun hat, wie kann ich es dann woanders speichern?

Hier ist der Code auf, wo es gespeichert wird:

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]; 
    } 

Sorry für die Länge dieser Frage wollen nur möglichst nützlich sein und setzen, was Code helfen könnten das Problem zu lösen. Lass es mich wissen, wenn es etwas anderes ist, das ich falsch mache! Danke Jungs!

+0

Aus Gründen des Protokolls sollten Sie Ihre Antwort kopieren, als Antwort einreichen und dann bestätigen (auswählen), um diese Frage zu schließen. –

+0

Okay, ich werde das tun! – gg13

Antwort

8

Ich habe es herausgefunden! Ich speicherte die absoluteString der URL, und wenn ich versuchte, den Audiospieler zu initialisieren, benutzte ich [NSURL fileURLWithPath:name], als es [NSURL URLWithString:name] sein sollte. Durch das Erstellen eines anderen fileURLWithPath wurde der Pfad geändert und würde nicht funktionieren. Ich werde das für einige Beispielcode lassen, denke ich!

Verwandte Themen