Ios 检查路径中是否存在文件,并根据结果设置按钮

Ios 检查路径中是否存在文件,并根据结果设置按钮,ios,Ios,我想检查文件是否存在,并根据结果设置按钮,但每次我都从函数getAudiofileName中得到nil值。哪种方法是设计此功能的更好方法。我怎样才能以一种好的方式做到这一点。我在这一部分挣扎了好几天。谁能告诉我出了什么问题吗 NSString *audioFile = [self getAudiofileName:indexPath.row]; NSLog(@"audiofile=%@",audioFile); // Getting nil everty time

我想检查文件是否存在,并根据结果设置按钮,但每次我都从函数getAudiofileName中得到nil值。哪种方法是设计此功能的更好方法。我怎样才能以一种好的方式做到这一点。我在这一部分挣扎了好几天。谁能告诉我出了什么问题吗

        NSString *audioFile = [self getAudiofileName:indexPath.row];
        NSLog(@"audiofile=%@",audioFile); // Getting nil everty time

    if (!audioFile) {
        [SoundsCell.customBtn setImage:[UIImage imageNamed:@"down.png"] forState:UIControlStateNormal];
        [playBtn setEnabled:NO];
    } else {
        [SoundsCell.customBtn setImage:[UIImage imageNamed:@"listen.png"] forState:UIControlStateNormal];
        [playBtn setEnabled:YES];
    }



    [SoundsCell.customBtn addTarget:self action:@selector(getconnection:) forControlEvents:UIControlEventTouchUpInside];


    SoundsCell.selectionStyle = UITableViewCellSelectionStyleNone;

    [delegate.delArrAlbumDetailCell addObject:SoundsCell];
    return SoundsCell;

}



- (NSString *)getAudiofileName:(int)IndexRow{


    NSLog(@"delegate.SoundsArr %d",[delegate.SoundsArr count]);
    selectedClip = [delegate.SoundsArr objectAtIndex:IndexRow];

    NSString *toendstring;
    NSString *temp = [NSString stringWithFormat:@"%@.mp3", selectedClip.clip_name];

    NSLog(@"temp =  %@", temp );
    NSLog(@"temp =  %@", selectedClip.clip_url );


    if (temp != nil) 
    {
        toendstring = temp;
        NSLog(@"toendString =%@", toendstring);

    }

    NSString *audioFilePath = [NSString stringWithFormat:@"%@/%@",self.dataPath,toendstring];
    NSLog(@"playing audioFilePath =%@", audioFilePath);
    NSFileManager *filmanager = [NSFileManager defaultManager];

    if([filmanager fileExistsAtPath:audioFilePath])
    {
        return toendstring;
    }
    else
    {
        return nil;
    }


}

提前感谢

您的
getAudiofileName()
函数有一个设计糟糕的API:如果它找不到要返回的文件名,那么返回
“NotExist”
是个坏主意。如果声音文件名为
“NotExist”
,则此例程无法给出合理的答案

相反,您应该将文件名作为参数和返回值中的success/failure传递回调用方。或者,返回
nil
表示失败。

一般评论:

  • 使用
    IBOutlet
    而不是迭代nib顶级对象-这更简单
  • 学习区分类名、实例名和常量(苹果程序员也是如此)
  • 正如前面的海报所说,不要为“NotExist”返回字符串;返回
    nil
  • getAudioFileName:
    中的temp永远不会有零长度(尽管它可能是
    nil
  • Java风格的附件名称透露了太多关于程序员的信息
  • 初始化单元格时,您可以将重用时不会更改的所有内容放入
    if(cell==nil)
    块中;或者更好,在笔尖上做
现在是答案。单元在重复使用时可以是任何状态,因此您需要设置下载和播放,例如:

   if (!audioFile) {
       [SoundsCell.customBtn setImage:[UIImage imageNamed:@"DOWNLOAD.png"] forState:UIControlStateNormal];
       [playBtn setEnabled:NO];
    } else {
       [SoundsCell.customBtn setImage:[UIImage imageNamed:@"PLAY.png"] forState:UIControlStateNormal];
       [playBtn setEnabled:YES];
    }

您可能需要更改操作。

请澄清您的问题。这里我将文件名作为参数传回。。正确的?否则我怎么能把参数传递给方法/函数,返回值,呃,返回。您可以通过引用而不是值来传递,这正是sarnold所暗示的。然而,我不会认为在你的情况下是合适的;没找到就归零。哇,做可可20年;令人印象深刻。:)