2011-12-16 3 views
1

У меня есть TextField, который я пытаюсь обновить, по мере того, как он продвигается через запуск моего кода с помощью KVC. К сожалению, я не могу ничего получить, чтобы обновить предыдущее значение.Попытка использовать KVC в Xcode для обновления TextLabel

Я использовал привязки на кнопке, которая запускает код, 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 различными способами и ни работы. Распределение кажется настроить начальную переменную просто отлично, журнал показывает, что я в методе, просто может» t получить мой ярлык для обновления после выделения).

Любые мысли или идеи были бы весьма признательны.

ответ

0

Я скорее разработчик iOS, поэтому я не уверен на 100%, как некоторые из стандартов переходят на сторону OSX. Тем не менее,

Вы говорите, что используете KVC, как будто это структура, обеспечивающая простую в использовании схему кодирования ключевого значения, которая не обязательно имеет смысл. Кажется, это настраиваемый класс, созданный вами под названием KVC.

В вашем файле KVC.m вы @synthesize эту переменную?

@implementation KVC 

@synthesize progressString = _progressString; 

Вы определили ваш объект frickenHeck как класс КВЦ который содержит свойство с именем 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. @property (nonatomic, copy) NSMutableString * progressString;

Я надеюсь, что некоторые из этой информации поможет вам в вашем путешествии ..

Марк