Попытка использовать KVC в XCode для обновления TextLabel - PullRequest
1 голос
/ 17 декабря 2011

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

Буду очень признателен за любые мысли или идеи.

1 Ответ

0 голосов
/ 17 декабря 2011

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

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

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

@implementation KVC

@synthesize progressString = _progressString;

Вы определили ваш объект frickenHeck как класс KVC, который содержит свойство progressString, которое вы делаете доступным для других классов с помощью этого вызова. @property (nonatomic, retain) NSString * progressString;

Если вы синтезировали переменную в своем файле @implementation, почему бы вам просто не позвонить:

frickenHeck.progressString = @"Testing";

или

frickenHeck.progressString = @"Completed";

Конечно, вы можете установить переменную с помощью Key Value Coding, но не устанавливая частную форму вашей переменной класса. Попробуйте:

[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;

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

Mark

...