尝试在Xcode中使用KVC来更新TextLabel

时间:2011-12-16 20:47:24

标签: xcode nsstring kvc

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

我已经在启动代码的按钮上使用了绑定,我想要更新的TextField,它只是不想更新。请原谅我关于n00bish的问题,但我一直在网上搜索,浏览教程,以不同的方式重写代码,似乎无法弄清楚为什么这些非常简单的任务不起作用。

这是我的KVC.h文件:

#import <Foundation/Foundation.h>

@interface KVC : NSObject{
    NSString *_progressString;
}

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

这是我的App头文件:

#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种不同的方式而且都不起作用。分配似乎设置了初始变量就好了,Log显示我在方法中,只是无法得到我的标签更新过去的分配。)

非常感谢任何想法或想法。

1 个答案:

答案 0 :(得分:0)

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

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

在你的KVC.m文件中你是否@synthesize这个变量?

@implementation KVC

@synthesize progressString = _progressString;

您已将对象frickenHeck定义为类KVC,其中包含名为progressString的属性,您可通过此调用将其提供给其他类。  @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声明设置为copy。 @property(非原子,复制)NSMutableString * progressString;

我希望这些信息可以帮助您完成旅程..

标记