2011-12-16 4 views
1

KVCを使用してコードを実行する際に値を更新しようとしているTextFieldがあります。残念ながら、私は初期値を過ぎて更新するものは何も得られないようです。XcodeでKVCを使用してTextLabelを更新しようとしています

コードを起動するボタン、つまり更新したいTextFieldにバインディングを使用しましたが、更新する必要はありません。 n00bishの質問について私を許してください。しかし、私は一日中オンラインで検索しています。チュートリアルを通り、コードをさまざまな方法で書き直しました。なぜこの単純なタスクがうまくいかないのか分からないようです。

は、ここに私の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種類の方法とどちらも仕事を更新しようとしました。割り当ては、ログは「私はちょうどすることができ、この方法によ示しうまく初期変数を設定しているようです割り当てを過ぎて更新するために私のラベルを取得しないでください)。

ご意見やご提案をいただければ幸いです。

答えて

0

私はもっとiOSデベロッパーだから、OSX側の標準とのクロスオーバーを100%確信しているわけではありません。それでも、必ずしも意味をなさないキー値コーディングスキームを提供するフレームワークのように、KVCを使用していると言われています。これはKVCというカスタムクラスのようです。

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

@implementation KVC 

@synthesize progressString = _progressString; 

あなたはこのコールを介して他のクラスに使用できるようにしていることを、progressStringというプロパティを保持し、あなたのオブジェクトクラスKVCとしてfrickenHeckを定義しています。 @property(非アトミック、保持)NSString * progressString;

frickenHeck.progressString = @"Testing"; 

または

frickenHeck.progressString = @"Completed"; 

あなたがコーディングキー値を経由して変数を設定することができます確かに、:あなたは、なぜあなただ​​け呼び出すことはありません、あなたの@implementationファイルで変数を合成していると仮定すると、

クラス変数のプライベートフォームに設定することはできません。試してみてください:

[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;私はこの情報の一部は、あなたの旅にあなたを支援願ってい

..

マーク

関連する問題