这是问题,希望很容易回答。
我正在创建一个类,在其中你给它一个视图数组,它将所有元素保存在其中并能够读回它们。我通过使用 NSArchiver 类得到了保存,但不是阅读部分。
@interface preferences : NSObject
- (void)savePreferences;
- (void)readPreferences;
@property (strong) NSMutableArray *theViews;
@end
#import "preferences.h"
@implementation preferences
- (id)init {
self = [super init];
if (self) {
_theViews = [[NSMutableArray alloc]init];
}
return self;
}
- (void)savePreferences{
NSLog(@"Saving Preferences...");
[NSKeyedArchiver archiveRootObject:_theViews toFile:@"preferences.xml"];
}
- (void)readPreferences{
NSLog(@"Reading Preferences...");
_theViews = [NSKeyedUnarchiver unarchiveObjectWithFile:@"preferences.xml"];
}
@end
这个想法是我想要一种简单的方法来保存偏好并在以后调用它们。我知道 NS_UserDefaults,并通过创建从界面构建器到我的代码的连接来手动完成,但实际上我有数千个偏好,我必须建立连接并保存。
所以我的目标是创建一个类,我说类似......
[preferences savePreferencesForViews:ArrayOfViews];//For Saving
[preferences readPreferencesForViews:ArrayOfViews];//For Reading
我的计划是在界面生成器中为每个元素设置标识符属性。然后要从中获取一个值,我将在视图中的每个子视图中进行一个函数循环,直到它找到一个与我请求的标识符匹配的标识符,我将检查它的类类型以创建一个临时变量并使用该临时变量类 tpye 从中获取价值。
例如,假设我的 NSView 中的对象是一个 NSTextView,其 stringValue 为“hello world”
使用 NSViews 方法 subViews 我返回一个包含所有子视图的数组,其中包括上面提到的 NSTextView。
我可以使用 NSObject className 中的函数将类名返回为@“NSTextView”。
那我应该可以说... 两件事之一
[subView setString:@"hey"];//compile error
或者...
NSTextView *temp = subView;
[temp setString:@"test"];
编译但我得到一个警告(不兼容的指针类型初始化 'NSTextView *__strong' 与类型的表达式'NSView *const __strong')
当我运行程序并尝试运行我的例程时,它崩溃并说 -[NSTextField setString:]:unrecognized selector sent to an instance 0X101a0cfe0
我不知道该怎么做,将不胜感激!
大家好。这是问题,希望很容易回答。
我正在创建一个类,在其中你给它一个视图数组,它将所有元素保存在其中并能够读回它们。我通过使用 NSArchiver 类得到了保存,但不是阅读部分。
@interface preferences : NSObject
- (void)savePreferences;
- (void)readPreferences;
@property (strong) NSMutableArray *theViews;
@end
#import "preferences.h"
@implementation preferences
- (id)init {
self = [super init];
if (self) {
_theViews = [[NSMutableArray alloc]init];
}
return self;
}
- (void)savePreferences{
NSLog(@"Saving Preferences...");
[NSKeyedArchiver archiveRootObject:_theViews toFile:@"preferences.xml"];
}
- (void)readPreferences{
NSLog(@"Reading Preferences...");
_theViews = [NSKeyedUnarchiver unarchiveObjectWithFile:@"preferences.xml"];
}
@end
这个想法是我想要一种简单的方法来保存偏好并在以后调用它们。我知道 NS_UserDefaults,并通过创建从界面构建器到我的代码的连接来手动完成,但实际上我有数千个偏好,我必须建立连接并保存。
所以我的目标是创建一个类,我说类似......
[preferences savePreferencesForViews:ArrayOfViews];//For Saving
[preferences readPreferencesForViews:ArrayOfViews];//For Reading
我的计划是在界面生成器中为每个元素设置标识符属性。然后要从中获取一个值,我将在视图中的每个子视图中进行一个函数循环,直到它找到一个与我请求的标识符匹配的标识符,我将检查它的类类型以创建一个临时变量并使用该临时变量类 tpye 从中获取价值。
例如,假设我的 NSView 中的对象是一个 NSTextView,其 stringValue 为“hello world”
使用 NSViews 方法 subViews 我返回一个包含所有子视图的数组,其中包括上面提到的 NSTextView。
我可以使用 NSObject className 中的函数将类名返回为@“NSTextView”。
那我应该可以说... 两件事之一
[subView setString:@"hey"];//compile error
或者...
NSTextView *temp = subView;
[temp setString:@"test"];
编译但我得到一个警告(不兼容的指针类型初始化 'NSTextView *__strong' 与类型的表达式'NSView *const __strong')
当我运行程序并尝试运行我的例程时,它崩溃并说 -[NSTextField setString:]:unrecognized selector sent to an instance 0X101a0cfe0
我不知道该怎么做,将不胜感激!
我的接口实现如下
@implementation appController
- (IBAction)savePreferences:(id)sender {
NSLog(@"Save Button Pressed");
//Create an instance of the preference class.
preferences *PreferencesObject = [[preferences alloc]init];
//Add the views we want to sve to the PreferenceObject.
[[PreferencesObject theViews]addObject:_preferenceView];
//Save the actual preferences now.
[PreferencesObject savePreferences];
}
- (IBAction)loadPreferences:(id)sender {
//Create an instance of the preference class.
preferences __strong *PreferencesObject = [[preferences alloc]init];
//Read the preferences into it's internal array.
[PreferencesObject readPreferences];
for(NSView __strong *view in [PreferencesObject theViews]){
if([[view identifier]isEqualTo:[_preferenceView identifier]]){
NSLog(@"View Match Found For PreferenceView, Setting...");
for(NSView *subView in [_preferenceView subviews]){
if([[subView identifier]isEqualTo:@"name"]){
NSLog(@"Attempting to set value of name control");
NSTextView *temp = subView;
[temp setString:@"test"];
}
}
}
}
}
@end