Ios 检查路径中是否存在文件,并根据结果设置按钮
我想检查文件是否存在,并根据结果设置按钮,但每次我都从函数getAudiofileName中得到nil值。哪种方法是设计此功能的更好方法。我怎样才能以一种好的方式做到这一点。我在这一部分挣扎了好几天。谁能告诉我出了什么问题吗Ios 检查路径中是否存在文件,并根据结果设置按钮,ios,Ios,我想检查文件是否存在,并根据结果设置按钮,但每次我都从函数getAudiofileName中得到nil值。哪种方法是设计此功能的更好方法。我怎样才能以一种好的方式做到这一点。我在这一部分挣扎了好几天。谁能告诉我出了什么问题吗 NSString *audioFile = [self getAudiofileName:indexPath.row]; NSLog(@"audiofile=%@",audioFile); // Getting nil everty time
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
表示失败。一般评论:
- 使用
而不是迭代nib顶级对象-这更简单IBOutlet
- 学习区分类名、实例名和常量(苹果程序员也是如此)
- 正如前面的海报所说,不要为“NotExist”返回字符串;返回
nil
中的temp永远不会有零长度(尽管它可能是getAudioFileName:
)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年;令人印象深刻。:)