2012-08-03 10 views
7

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!

+0

W ramach protokołu należy skopiować odpowiedź, przesłać ją jako odpowiedź, a następnie zatwierdzić (zaznaczyć), aby zamknąć to pytanie. –

+0

ok, zrobię to! – gg13

Odpowiedz

8

Wyliczyłem to! Zapisałam adres URL absoluteString, a kiedy spróbowałem zainicjować odtwarzacz audio, użyłem [NSURL fileURLWithPath:name], kiedy powinno być [NSURL URLWithString:name]. Tworząc kolejny fileURLWithPath zmieniał ścieżkę i nie działał. Zostawię to dla jakiegoś przykładowego kodu, jak sądzę!

Powiązane problemy