1

NSOutlineViewを階層ファイルブラウザとして使用するために、このチュートリアルに従っています。

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/OutlineView/Articles/UsingOutlineDataSource.html

チュートリアルのすべてのコードを使用しましたが、機能しました。initWithPath:ただし、それ以外のパスで呼び出しようとしました/が、機能しません。fullPath一番上の項目(つまり、で指定されたフォルダーinitWithPath)のはフォルダーの名前であり、のchildrenメソッドはFileSystemItem空の配列を返します。ファイルマネージャが/FolderName/絶対パスではなく検索しているためと想定します。絶対パスは保存されていないように見えます。

このコードを変更して、これを実行できるようにするにはどうすればよいですか?

4

3 に答える 3

4

上記のコードはほとんど機能します。フォルダを開こうとするとすぐにクラッシュします。この変更で試してください。それは私にとって完璧に機能します:

- (id)initWithPath:(NSString *)path parent:(FileSystemItem *)parentItem {
  if (self = [super init]) {
    relativePath = [path copy];
    parent = parentItem;
  }
 return self;
}
于 2012-08-04T21:54:53.827 に答える
2

次の方法を変更します。

- (id)initWithPath:(NSString *)path parent:(FileSystemItem *)parentItem {
    self = [super init];
    if (self) {
        relativePath = path; //[[path lastPathComponent] copy];
        NSLog(@"%@",relativePath);
        parent = parentItem;
    }
    return self;
}

元のロジックは、ルートから開始することを前提としています。これにより、どのパスでも機能するはずです。

于 2012-07-22T00:07:24.240 に答える
0

このコードを試してください-https://github.com/johndpope/TreeTest

//
//  ViewController.m
//  TreeTest
//
//  Created by Zakk Hoyt on 7/9/14.
//  Copyright (c) 2014 Zakk Hoyt. All rights reserved.
//

#import "ViewController.h"
#import "VWWContentItem.h"
#import "FileSystemItem.h"


typedef void (^VWWEmptyBlock)(void);
typedef void (^VWWCLLocationCoordinate2DBlock)(CLLocationCoordinate2D coordinate);
typedef void (^VWWBoolDictionaryBlock)(BOOL success, NSDictionary *dictionary);





@interface ViewController ()
@property (weak) IBOutlet NSOutlineView *outlineView;
@property (weak) IBOutlet NSPathControl *pathControl;
//@property (strong) NSMutableArray *contents;
@property (strong) VWWContentItem *item;
@property (strong) NSIndexSet *selectedIndexes;


@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // Do any additional setup after loading the view.
    NSString *picturesPath = [NSString stringWithFormat:@"%@/%@", NSHomeDirectory(), @"Pictures"];
    self.pathControl.URL = [NSURL fileURLWithPath:picturesPath];
//    [FileSystemItem rootItemWithPath:self.pathControl.URL.path];
//    [self seachForFilesInDirectory:picturesPath];


}

- (void)setRepresentedObject:(id)representedObject {
    [super setRepresentedObject:representedObject];

    // Update the view, if already loaded.

}
- (IBAction)pathControlAction:(NSPathControl *)sender {

}




// Data Source methods

- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(FileSystemItem*)item {
    return (item == nil) ? 1 : [item numberOfChildren];
}

- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(FileSystemItem*)item {
    return (item == nil) ? YES : ([item numberOfChildren] != -1);
}

- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(FileSystemItem*)item {
//    return (item == nil) ? [FileSystemItem rootItem] : [(FileSystemItem *)item childAtIndex:index];
    return (item == nil) ? [FileSystemItem rootItemWithPath:self.pathControl.URL.path] : [(FileSystemItem *)item childAtIndex:index];
}

- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(FileSystemItem*)item {
    if([tableColumn.identifier isEqualToString:@"tree"]){
        return (item == nil) ? @"/" : (id)[item relativePath];
//        return (item == nil) ? @"Pictures" : (id)[item relativePath];
    } else if([tableColumn.identifier isEqualToString:@"coordinate"]){
        return @"coordinate";
    }

    return nil;
//    return (item == nil) ? self.pathControl.URL.path : (id)[item relativePath];
}

// Delegate methods

- (BOOL)outlineView:(NSOutlineView *)outlineView shouldEditTableColumn:(NSTableColumn *)tableColumn item:(FileSystemItem*)item {
    return NO;
}

@end
于 2015-02-12T07:47:27.483 に答える