gpt4 book ai didi

objective-c - 如何使用另一个类的方法访问一个类的变量?

转载 作者:行者123 更新时间:2023-12-03 18:01:35 24 4
gpt4 key购买 nike

嗨,我的英语不是很好,所以我会尽力解释我的问题我是 cocoa 和 xcode 的新手,所以也许我的问题比我想象的要容易

我有一个类,它基本上是一个用于注册客户信息的公式,我在那里定义了一个方法 - (void)searcht:(NSString*)s;此方法对数据库进行查询,其中代码 = s

- (void) searcht:(NSString *)s{
PGSQLConnection *connection1= [[PGSQLConnection alloc] init];
NSString *cmd=[[NSString alloc] initWithFormat:@"select * from oc_master_customer where customer_id=%@",s ];
NSLog(@"%@", cmd);


if ([connection1 connect]){
NSLog(@" ENTRO %@", [connection1 lastError]);
PGSQLRecordset *rs1 = [connection1 open:cmd];
if (![rs1 isEOF])
{
NSLog(@" ENTRO 2 %@", [connection1 lastError]);
[matchcode setStringValue:
[[rs1 fieldByName:@"matchcode"] asString]];
NSLog(@" MATCHCODE %@", [matchcode stringValue]);
NSLog(@" MATCHCODE 2 %@", [[rs1 fieldByName:@"matchcode"] asString]);
[name1 setStringValue:
[[rs1 fieldByName:@"name1"] asString]];
[zip setStringValue:
[[rs1 fieldByName:@"zip"] asString]];
[bank_code setStringValue:
[[rs1 fieldByName:@"bank_code"] asString]];
[bank_account setStringValue:
[[rs1 fieldByName:@"bank_account"] asString]];
[bank_name setStringValue:
[[rs1 fieldByName:@"bank_name"] asString]];
[bank_iban setStringValue:
[[rs1 fieldByName:@"bank_iban"] asString]];
[bank_swift setStringValue:
[[rs1 fieldByName:@"bank_swift"] asString]];
[city setStringValue:
[[rs1 fieldByName:@"city"] asString]];
[city_part setStringValue:
[[rs1 fieldByName:@"citypart"] asString]];
[street setStringValue:
[[rs1 fieldByName:@"street"] asString]];
[country setStringValue:
[[rs1 fieldByName:@"country_code"] asString]];
}

[connection1 close];
[rs1 close];}
}

我将此方法与 NSSearchfield 一起使用,它工作得很好,现在我创建了 nsearchfield 的子类,我想在用户按下 Enter 时调用此方法,我可以访问该方法,但无法更改字符串值来自 IBOutlet。我已经将 IBOutlets 声明为 @public。我的代码来自 nssearchfiel 子类

-(void)keyUp:(NSEvent*)event
{
if ([event keyCode]==36){
[[self window] selectKeyViewFollowingView:self];
customers* c= [[customers alloc] init];
NSLog(@"Key released: %@",[self stringValue]);
[c searcht:[self stringValue]];
}
}

我的问题是,如果我从其他类调用,我定义的方法不会执行任何操作 有人知道我必须做什么或我错过了什么

最佳答案

您的 IBOutlet 连接似乎已损坏。当您在 -keyDown 事件中创建 customers 实例时,您的所有网点均未连接。这就是它坏掉的原因。这不是继承的问题,而是面向对象设计的问题。您可能需要重新考虑您的函数如何相互通信。

为了证明情况是否如此(很抱歉,我在阅读您的代码时遇到了一些问题),请在您的 -searcht: 函数中添加一条日志语句以查看它是否存在:

NSLog(@"name1field: %@", name1);

我猜您会看到类似的内容:name1field: (null)

已更新建议的解决方案

如果您那里有 IBOutlets(这对我来说是一个值得怀疑的决定),则意味着它已在您的 Nib 中实例化。您可能想要做的(假设您没有彻底改变代码的结构)是在您的 NSSearchField 子类中创建一个 socket ,将其连接到您的 customers 对象nib,并使用它,而不是创建 customers 的新实例。

不过,这只是一个创可贴解决方案。您可能想阅读 design patterns used in Cocoa code 中的一些内容。这可能会给您一些关于如何构建类的更好的想法。

关于objective-c - 如何使用另一个类的方法访问一个类的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5822349/

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