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!
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. –
Okay, ich werde das tun! – gg13