我有一个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显示我在方法中,只是无法得到我的标签更新过去的分配。)
非常感谢任何想法或想法。
答案 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;
我希望这些信息可以帮助您完成旅程..
标记