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 にします。

これはシミュレーターでは機能しますが、デバイスでテストするときは機能しません。デバイスでは、セル NSLogs PDF.png (たとえば) であっても、cell.imageView.image のすべてが notFound.png として表示されます。誰が問題が何であるかについて何か考えがありますか? ありがとう。

4

2 に答える 2

6

Mac OS X (およびシミュレーター) で使用されるファイル システムは、通常、大文字と小文字を区別しないように構成されています (ファイル名を作成するときに大文字と小文字は保持されますが、間違った大文字で検索しても問題ありません)。ただし、デバイスは大文字と小文字を区別します。

imageNamedプラットフォーム間でファイルの検索 (またはローカル ファイル システムからファイルを読み取るもの)に違いがある場合は、大文字と小文字を確認してください。


それでも見つからない場合は、ファイルがターゲットの「ビルド フェーズ」に表示されていることを確認し、「バンドル リソースのコピー」セクションで、ベース ファイル名と拡張子の両方が正しい大文字で表示されていることを確認することをお勧めします。また、「製品」-「クリーン」を実行してアプリを再構築するようにしてください.Xcodeは、どのファイルがコピーされたかについて混乱することがあります. また、Xcode を終了して再起動したと仮定します。なぜなら、そのまれな、まったく説明のつかない動作が発生した場合は、Xcode (または場合によっては私のマシン) を再起動すると問題が解決するからです。

于 2012-12-01T19:22:24.450 に答える
1

PDFがバンドルに含まれていないようです。imageNamed メソッドの選択が間違っているようです

imageWithContentsOfFile を呼び出しますが、notfound 画像に対してのみ 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 に答える