iphone: сообщение отправлено на освобожденный экземпляр - PullRequest
0 голосов
/ 02 апреля 2012

Я знаю такую ​​проблему с нубом, но это убивает меня уже 2 дня у меня есть следующий код

albumsVC.discList = [[NSMutableArray alloc]init];
for(id song in songs){
    if([self checkIfAllFilesExist:[song objectForKey:@"fileName"]]){ 
        [albumsVC.discList addObject:song];
    }
}

и

 -(BOOL)checkIfAllFilesExist: (NSString *) theFilename {
    BOOL exist;
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentDir = [documentPaths objectAtIndex:0];
    docPath = [ documentDir stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.mp3",theFilename]];

    NSFileManager *fileManager = [NSFileManager defaultManager];
    exist = [fileManager fileExistsAtPath:docPath];
    docPath = nil;
    docPath = [[NSString alloc] init];
    if(!exist){
        return NO;
    }
    return YES;
}

но он падает после пяти циклов (я не знаю, почему пять?) И сообщает, что сообщение отправлено на освобожденный экземпляр 0x87cdc10 на линии

docPath = [ documentDir stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.mp3",theFilename]];

где docPath - строка NSString в заголовке, созданном как неатомарное и сохраняющее ..

Я не могу понять проблему, можешь ли ты мне помочь?

Ответы [ 2 ]

0 голосов
/ 02 апреля 2012

, так как вы говорите, что это всегда происходит сбой на пятой итерации цикла, проверьте bject, который получается зацикливанием.

Я хочу сказать, отметьте theFilename. Попробуйте напечатать словарь 'song', чтобы убедиться, что в клавише fileName что-то есть.

Также используйте код Apurv.

0 голосов
/ 02 апреля 2012

-(BOOL)checkIfAllFilesExist: (NSString *) theFilename создает утечку памяти.

Замените его следующим кодом:

-(BOOL)checkIfAllFilesExist: (NSString *) theFilename {
    BOOL exist;
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentDir = [documentPaths objectAtIndex:0];
    self.docPath = [ documentDir stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.mp3",theFilename]];

    NSFileManager *fileManager = [NSFileManager defaultManager];
    exist = [fileManager fileExistsAtPath:docPath];
    if(!exist){
        return NO;
    }
    return YES;
}

Предполагая, что у вас есть свойство docPath в вашем файле .h с неатомарным, оставьте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...