EDYCJA: Zorientowałem! Zapisałem absoluteString adresu URL, a kiedy próbowałem inicjować odtwarzacz audio, użyłem [NSURL fileURLWithPath: name]; kiedy powinno być [NSURL urlWithString: name]. Tworząc kolejny plikURLWithPath, zmieniał on ścieżkę i nie działał. Zostawię to dla jakiegoś przykładowego kodu, jak sądzę!Zapisywanie adresu URL w danych podstawowych, ale nie działa, gdy próbuję go później użyć.
Okej, więc mam nagraną piosenkę od użytkownika w mojej aplikacji. Chcę, aby użytkownik mógł zapisać te nagrania, więc pomyślałem, że powinienem zapisać ciąg URL nagrania w podstawowych danych, pobrać adres URL i załadować AVAudioPlayer z tym adresem URL. Ale to nie działa.
Daje mi:
Error in audioPlayer: The operation could not be completed.
To NSString z adresem URL:
file://localhost/file:/localhost/var/mobile/Applications/E09081DE-434F-46CA-A598-
A2470973C0F1/Documents/Rang%2520De%2520sound.caf
Mam wrażenie, że ma to coś wspólnego z faktem, że oszczędza w localhost, a ja nie może uzyskać dostępu do tego pliku podczas próby zainicjowania odtwarzacza audio. Ale nie jestem pewien. Wiem, że od razu można uzyskać dostęp do adresu URL, ponieważ po nagraniu mogę odtworzyć nagranie przy użyciu tego adresu URL.
Jak ja ratuję nagrywania:
- (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!";
}
Kiedy sprowadzić go zmienia URL! Nie rozumiem dlaczego! Wygląd:
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
Przeszedł z Le% 20 do Le% 2520! Nie nagrałem ponownie ani niczego, co po prostu zapisałem ten sam ciąg w danych podstawowych i pobrałem go! Na początku jest też pewna zmiana w localhost.
Wtedy to jak ja ściągam go:
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];
Każda pomoc, w jaki sposób rozwiązać ten facetów? Jeśli ma to związek z hostem lokalnym, to w jaki sposób zapisać go w innym miejscu?
Oto kod na którym jest zapisany:
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];
}
Przepraszamy za długość tej kwestii, po prostu chcą być pomocny jak to możliwe i umieścić cokolwiek kod może pomóc w rozwiązaniu problemu. Daj mi znać, jeśli to coś innego, co robię nieprawidłowo! Dzięki chłopaki!
W ramach protokołu należy skopiować odpowiedź, przesłać ją jako odpowiedź, a następnie zatwierdzić (zaznaczyć), aby zamknąć to pytanie. –
ok, zrobię to! – gg13