質問

NSCollectionViewのプロトタイプとして使用されるカスタムNSView内にnstabviewがあります。 2番目のタブには、nsbuttonボタンとnsimageViewオブジェクトがあります。

nsbuttonは、nsopenpanelをトリガーする「閲覧」ボタンです。

ボタンのセレクターをMyCustomViewのIBACTIONに接続しました。これは以下を実行します。

// MyView.h

@interface MyView : NSView 
{
    IBOutlet NSTabView *tabView;
    IBOutlet NSImageView *myImageView;
    IBOutlet NSButton *browseButton;
}

-(IBAction)openBrowseDialog:(id)sender;


@end


// MyView.m

-(IBAction)openBrowseDialog:(id)sender
{

    NSOpenPanel* openDlg = [NSOpenPanel openPanel];

    [openDlg setCanChooseFiles:YES];
    [openDlg setCanChooseDirectories:NO];
    [openDlg setAllowsMultipleSelection:NO];
    [openDlg setAllowedFileTypes:[NSArray arrayWithObjects:@"png", @"jpg", @"jpeg", @"gif", nil]];


    if ( [openDlg runModal] == NSOKButton )
    {

        NSArray* files = [openDlg URLs];
        NSURL* fileURL = [files objectAtIndex:0];
        NSData *imageData = [NSData dataWithContentsOfURL:fileURL];

        if( imageData != nil )
        {
            NSImage *image = [[NSImage alloc] initWithData:imageData];
            myImageView.image = image;
            [image release];
        }

    }

}

インターフェイスビルダーのiboutletとして接続しているにもかかわらず、コンソールでこの「myimageview」トレース「null」を実行すると。理由を説明してもらえますか?代わりにこれをどうすればいいですか?また、nscollectionViewItemオブジェクトの「fileurl」値を「object object」に渡す必要がありますが、ここからアクセスする方法がわかりませんか?

役に立ちましたか?

解決

私はついにトラブルシューティングの1日後に必要なものを達成しました。私の元のアプローチにはいくつかの問題がありました:

1)nscollectionView内でnStabviewを使用することは、「非アクティブ」タブでバインディングが初期化されないため、悪い考えのようです。私はそれを廃棄し、代わりにオブジェクトの手動ショー/非表示でnssegmentedcontrolを選択しました。

2)私の元の質問のすべてのコードは、nsviewのサブクラスではなく、nscollectionViewitemのサブクラスの中に実際に入る必要があります。

今ではそれはすべて良いです。勉強中です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top