0

这是我的代码:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSArray *filePathsArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:documentsDirectory  error:nil];
    NSMutableArray *finalArray = [(NSArray*)filePathsArray mutableCopy];
    NSFileManager *fm = [NSFileManager defaultManager];
    NSArray *files = [fm contentsOfDirectoryAtPath:documentsDirectory error:nil];
    NSString *fileFirst = [files objectAtIndex:0];
    NSString *fullPath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, fileFirst];
    /* NSUInteger index = [finalArray indexOfObject:@".DS_Store"];
    [finalArray removeObjectAtIndex: index]; */
    //NSLog(@"files array %@", finalArray);
    NSString *title = [[[finalArray objectAtIndex:indexPath.row] lastPathComponent]stringByDeletingPathExtension];
    NSString *image = [[finalArray objectAtIndex:indexPath.row] lastPathComponent];
    NSString *newimage = [[image pathExtension]stringByAppendingPathExtension:@"png"];
    //NSLog(@"%@",newimage);

    if (![UIImage imageNamed:newimage]) {
        newimage = @"notFound.png";
    }

    NSDictionary *fileAttribs = [[NSFileManager defaultManager] attributesOfItemAtPath:fullPath error:nil];
    ////NSLog(@"Here: %@",fileAttribs);
    //long long fileSize = [fileAttribs fileSize];

    NSDate *result = [fileAttribs valueForKey:NSFileCreationDate]; //or NSFileModificationDate
    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init]  autorelease];
    [dateFormatter setDateStyle:NSDateFormatterLongStyle];
    NSString *dateString = [dateFormatter stringFromDate:result];   
    [dateFormatter setDateStyle:NSDateFormatterNoStyle];

    cell.textLabel.text = title;
    cell.imageView.image = [UIImage imageNamed:newimage];
    //cell.detailTextLabel.text = [NSString stringWithFormat:@"File extenstion: %@",[[image pathExtension]uppercaseString]];
    cell.detailTextLabel.text = dateString;
    cell.detailTextLabel.font = [UIFont systemFontOfSize:15];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    return cell;
}

正如您在上面看到的,我在用户 Documents 文件夹中获取了文件的扩展名,并找到了具有该扩展名的图像。这有效 - 当我 NSLog 字符串时,我得到了正确的图像(例如 PDF.png)但是,如果找不到图像,我希望 newimage 变量为 notFound.png。

这适用于模拟器,但不适用于我在设备上测试时。在设备上,所有的 cell.imageView.image 都显示为 notFound.png,即使单元格 NSLogs PDF.png(例如)。有人对问题所在有任何想法吗?谢谢。

4

2 回答 2

6

Mac OS X(以及您的模拟器)使用的文件系统通常配置为区分大小写(当您创建文件名时它会保留大小写,但如果您以错误的大小写检索也没关系)。不过,该设备区分大小写。

如果您发现imageNamed平台之间通过(或从本地文件系统读取文件的任何方式)查找文件的差异,请检查您的大小写。


如果您仍然没有找到它,那么我建议确保该文件显示在目标的“构建阶段”中,并检查“复制捆绑资源”部分的基本文件名和扩展名的大小写是否正确。我还会确保您执行“产品”-“清洁”并重新构建应用程序,因为有时 Xcode 会对已复制的文件感到困惑。我还假设您已经退出并重新启动了 Xcode,因为当我看到这种罕见的、完全无法解释的行为时,重新启动 Xcode(有时甚至是我的机器)会修复它。

于 2012-12-01T19:22:24.450 回答
1

pdf 似乎不在您的捆绑包中。imageNamed 似乎是错误的方法选择

调用 imageWithContentsOfFile 但仅用于未找到的图像调用 imageNamed

编辑:立即使 newimage 变量成为图像

例如

id newimagepath = [[image pathExtension]stringByAppendingPathExtension:@"png"];
UIImage *newimage = [UIImage imageWithContentsOfFile:newimagepath];

if(!newimage) {
    newimage = [UIImage imageNamed:@"notFound.ong"]
}
于 2012-12-01T18:59:48.310 回答