1

我有一个 TextField,我正在尝试通过使用 KVC 运行我的代码来更新值。不幸的是,我似乎无法更新初始值。

我已经使用了启动代码的按钮上的绑定,我想更新的 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 种不同的方式,但都不起作用。分配似乎可以很好地设置初始变量,日志显示我在方法中,只是无法让我的标签更新过去分配)。

任何想法或想法将不胜感激。

4

1 回答 1

0

我更像是一名 iOS 开发人员,所以我不能 100% 确定某些标准如何跨越到 OSX 方面。尽管如此,

您是说您正在使用 KVC,就像它是一个提供易于使用的键值编码方案的框架,这不一定有意义。这似乎是您创建的一个名为 KVC 的自定义类。

在你的 KVC.m 文件中,你 @synthesize 这个变量了吗?

@implementation KVC

@synthesize progressString = _progressString;

您已将对象 frickenHeck 定义为类 KVC,该类包含一个名为 progressString 的属性,您可以通过此调用将其提供给其他类。@property (nonatomic, 保留) 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 (nonatomic, copy) NSMutableString *progressString;

我希望这些信息中的一些对您的旅程有所帮助..

标记

于 2011-12-16T21:57:46.187 回答