gpt4 book ai didi

objective-c - 如果我只有包含 View ,如何设置 NSTextView 的 stringValue ?

转载 作者:行者123 更新时间:2023-12-03 17:13:27 27 4
gpt4 key购买 nike

这是问题,希望很容易回答。

我正在创建一个类,在其中给它一个 View 数组,它保存其中的所有元素并能够读回它们。我通过使用 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

我的计划是在界面构建器中为每个元素设置标识符属性。然后,为了从中获取值,我将有一个函数循环遍历 View 中的每个 subview ,直到找到一个标识符与我请求的内容相匹配的标识符,然后我将检查它的类类型以创建该 subview 的临时变量并使用该临时变量类 tpye 从中获取值。

例如,假设我的 NSView 内部的对象是一个 NSTextView,其 stringValue 为“hello world”

使用 NSViews 方法 subViews,我返回所有 subview 的数组,其中包括上面提到的 NSTextView。

我可以使用 NSObject className 中的函数将类名返回为 @"NSTextView"。

那么我应该可以说...两件事之一

   [subView setString:@"hey"];//compile error

或者...

 NSTextView *temp = subView;
[temp setString:@"test"];

可以编译,但我收到警告(不兼容的指针类型使用“NSView *const __strong”类型的表达式初始化“NSTextView *__strong”)

当我运行程序并尝试运行我的例程时,它崩溃并显示 -[NSTextField setString:]:无法识别的选择器发送到实例 0X101a0cfe0

我不知道该怎么做,我们将不胜感激!

大家好。这是问题,希望很容易回答。

我正在创建一个类,在其中给它一个 View 数组,它保存其中的所有元素并能够读回它们。我通过使用 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

我的计划是在界面构建器中为每个元素设置标识符属性。然后,为了从中获取值,我将有一个函数循环遍历 View 中的每个 subview ,直到找到一个标识符与我请求的内容相匹配的标识符,然后我将检查它的类类型以创建该 subview 的临时变量并使用该临时变量类 tpye 从中获取值。

例如,假设我的 NSView 内部的对象是一个 NSTextView,其 stringValue 为“hello world”

使用 NSViews 方法 subViews,我返回所有 subview 的数组,其中包括上面提到的 NSTextView。

我可以使用 NSObject className 中的函数将类名返回为 @"NSTextView"。

那么我应该可以说...两件事之一

   [subView setString:@"hey"];//compile error

或者...

 NSTextView *temp = subView;
[temp setString:@"test"];

可以编译,但我收到警告(不兼容的指针类型使用“NSView *const __strong”类型的表达式初始化“NSTextView *__strong”)

当我运行程序并尝试运行我的例程时,它崩溃并显示 -[NSTextField setString:]:无法识别的选择器发送到实例 0X101a0cfe0

我不知道该怎么做,我们将不胜感激!

我的接口(interface)实现如下

@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

最佳答案

您的 View 数组似乎包含文本字段,而不是 TextView ,也许您在 IB 中犯了绑定(bind)错误。

文本字段响应 setStringValue: ,而不是 setString: 。

一些提示

  • 您可以测试对象的类归属;
  • 只要确定指针指向某个类的对象,就可以强制转换该指针。在您的情况下,您将进行向下转换(从基类到子类)。

所以你会做类似的事情:

if ([ subview isKindOfClass: [NSTextView class]]) // until you fix that binding error or whatever, it will return NO
{
NSTextView* temp= (NSTextView*) subview;
[ temp setString: @"temp" ];
}

关于objective-c - 如果我只有包含 View ,如何设置 NSTextView 的 stringValue ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14311577/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com