1

KVCを使用してコードを実行する過程で値を更新しようとしているTextFieldがあります。残念ながら、初期値を超えて更新するものを取得できないようです。

コードを起動するボタンのバインディング、更新したいTextFieldを使用しましたが、更新したくないだけです。n00bishの質問をお許しください。しかし、私は1日中オンラインで検索し、チュートリアルを実行し、コードをさまざまな方法で書き直しており、この非常に単純なタスクが機能しない理由を理解できないようです。

これが私のKVC.hファイルです:

#import <Foundation/Foundation.h>

@interface KVC : NSObject{
    NSString *_progressString;
}

@property (nonatomic, retain) NSString *progressString;
@end

これが私のアプリヘッダーファイルです:

#import <Cocoa/Cocoa.h>
#import "KVC.h"

//UI Controls
@interface AppDelegate : NSObject <NSApplicationDelegate> 
{
    NSWindow *window;
    NSPersistentStoreCoordinator *__persistentStoreCoordinator;
    NSManagedObjectModel *__managedObjectModel;
    NSManagedObjectContext *__managedObjectContext;
    NSButton *_loadingExtracts;
    NSButton *_processStuff;
    NSProgressIndicator *_progressBar;
    KVC *myProgressString; 
}

@property (assign) IBOutlet NSWindow *window;

@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;
@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
@property (assign) IBOutlet NSButton *loadingExtracts;
@property (assign) IBOutlet NSButton *processStuff;
@property (assign) IBOutlet NSProgressIndicator *progressBar;

- (IBAction)saveAction:(id)sender;
- (IBAction)loadingExtracts:(id)sender;
- (IBAction)processStuff:(id)sender;

@end

そして最後に、これが私が更新することができないコード内の関数です。

- (IBAction)processStuff:(id)sender 
{
    KVC *frickenHeck = [[KVC alloc] init];
    NSLog(@"Button Pressed - Processing Information");
    [myProgressString setValue:@"Testing" forKey:@"_progressString"];
    [_progressBar setUsesThreadedAnimation:YES];
    [_progressBar startAnimation:self];

    //Turn off Progress Bar
    [_progressBar stopAnimation:self];
    [frickenHeck setValue:@"Completed" forKey:@"_progressString"];
    //[_progressText setStringValue:@""];
}

(ご覧のとおり、2つの異なる方法で更新を試みましたが、どちらも機能しません。割り当てによって初期変数が適切に設定されているようです。ログには、メソッド内にいることが示されています。ラベルを更新できません。割り当て)。

任意の考えやアイデアをいただければ幸いです。

4

1 に答える 1

0

私はどちらかというと iOS 開発者なので、一部の標準が OSX 側にどのようにクロスオーバーするかについて 100% 確信があるわけではありません。それにもかかわらず、

あなたはKVCを使用していると言っています.KVCは使いやすいキーバリューコーディングスキームを提供するフレームワークですが、必ずしも意味がありません. これは、あなたが作成した KVC という名前のカスタム クラスのようです。

KVC.m ファイルで、この変数を @synthesize しましたか?

@implementation KVC

@synthesize progressString = _progressString;

オブジェクト frickenHeck を、progressString と呼ばれるプロパティを保持するクラス KVC として定義し、この呼び出しを介して他のクラスで使用できるようにします。@property (非アトミック、保持) NSString *progressString;

@implementation ファイルで変数を合成したと仮定すると、次のように呼び出してみませんか。

frickenHeck.progressString = @"Testing";

また

frickenHeck.progressString = @"Completed";

確かに、キー値コーディングを介して変数を設定できますが、クラス変数のプライベート形式に設定することはできません。試す:

[frickenHeck setValue:@"Completed" forKey:@"progressString"];

それで、この変数を合成しましたか?または、少なくとも変数のアクセサーセッター/ゲッターを設定しますか? 通常、どちらか一方のみを実行します。

ヘッダ:

- (void)progressString;
- (NSString *)setProgressString:(NSString *)_string;

実装:

- (void)progressString {
     return _progressString;

}
- (NSString *)setProgressString:(NSString *)_string {

_progressString=_string;

}

また、この変数を頻繁に変更する場合は、クラスの NSMutableString 形式を使用し、@property 宣言をコピーに設定することもできます。@property (非アトミック、コピー) NSMutableString *progressString;

この情報があなたの旅に役立つことを願っています..

マーク

于 2011-12-16T21:57:46.187 に答える