0

私は Cocoa と XCode の初心者です。あなたの助けを借りたいです。XIB ウィンドウのコントローラーを作成し、ウィンドウを開始しました。コントローラーに必要なパラメーターが 1 つあります。パラメーターを設定しますが、ボタンをクリックしてパラメーターを回復する必要がある場合、値は nill または空の。

例えば...

私は持っている

#import <Cocoa/Cocoa.h>
#import "ITKExample1Filter.h"
#import "Helper.h"

@interface VentanaGraficaController1 : NSWindowController {
    ViewerController* _viewerController;
    IBOutlet NSComboBox *combo;
    IBOutlet NSTextField *windowLevelTextField;
    IBOutlet NSTextField *windowWidhTextField;
    NSString *cad_;
}


@property NSString *cad;
@property ViewerController* viewerController;
//Metodos
- (IBAction) converToRGB: (id)sender;
- (IBAction) initAux: (id)sender; 
- (void) initController : (ViewerController*) vc: (int) n;

@end

@implementation VentanaGraficaController1

//Parametros que sintetizaremos para manejar los valores por referencia
@synthesize viewerController = _viewerController;
@synthesize cad = cad_;

// .....

- (IBAction) converToRGB: (id)sender {
    NSAlert *a = [NSAlert alertWithMessageText:cad_   
                                 defaultButton:@"OK"
                               alternateButton:@"Cancel"
                                   otherButton:nil
                     informativeTextWithFormat:@"Cadena por syntetise"];
    [a runModal];
}
// ..... The rest

次のようにコントローラーを使用します。

VentanaGraficaController1 *controller = [[VentanaGraficaController1 alloc] initWithWindowNibName:@"VentanaGraficaController1"];

[controller setViewerController:viewerController];
[controller setViewerController:(viewerController)];
[controller setCad:@"works??"];
controller.viewerController = viewerController;

controller.cad = @"works??";
[controller showWindow:nil];

NSSAlert を表示すると、常にcad_空白または空の文字列として表示されます。多くの方法を試しましたが、値が失われる理由がわかりません。

4

2 に答える 2

1

コントローラーにプロパティを保持するように指示していないようです。

あなたが持っている

@property NSString *cad;
@property ViewerController* viewerController;

デフォルトでは値が割り当てられます。つまり、値が消える可能性があります。

これらの行を次のように変更してみてください。

@property (strong) NSString *cad;
@property (strong) ViewerController* viewerController;
于 2012-05-15T06:05:48.803 に答える
0

私が持っているXIBのコントローラーで、参照によってNSStringの値を設定しようとしています

@interface VentanaGraficaController1 : NSWindowController {
    ViewerController* _viewerController;
    IBOutlet NSComboBox *combo;
    IBOutlet NSTextField *windowLevelTextField;
    IBOutlet NSTextField *windowWidhTextField;
    NSString *cad_;
}


@property(strong) NSString *cad;

@end

And In my .m file I have the Action of the Button With this Code....

@implementation VentanaGraficaController1

//Parametros que sintetizaremos para manejar los valores por referencia
@synthesize viewerController = _viewerController;
@synthesize cad = cad_;

- (id)initWithWindow:(NSWindow *)window 
{
    self = [super initWithWindow:window];

    if (self) {
        // Initialization code here.

    }

    return self;
}

- (IBAction) converToRGB: (id)sender {
    NSAlert *a = [NSAlert alertWithMessageText: 
                                 cad_
                                 defaultButton:@"OK" alternateButton:@"Cancel"

                                   otherButton:nil informativeTextWithFormat:

                  @"Just a Test"];
    [a runModal];
}

そして私のコードでは...

    VentanaGraficaController1 *controller = [[VentanaGraficaController1 alloc] initWithWindowNibName:@"VentanaGraficaController1"]; 
   controller.cad = @"My striiiiing"; 
   [controller showWindow:nil]; 
   return 0;

それだけで、本当に送信する必要があるオブジェクトが他にあるということですが、NSStringを送信できない場合は同じ理由で、これでほぼ2日かかります。

私もセッターを使用しましたが、NSSAlerert を使用して NSString を出力すると、同じ結果が得られました。文字列を空または Nill として出力しました。

于 2012-05-16T03:40:08.157 に答える