你好我的英语不是很好,所以我会尽力解释我的问题 我是cocoa和xcode的新手,所以也许我的问题比我想的更容易
我有类,这基本上是寄存器客户端信息的处方集,在那里我定义了一个方法 - (void)searcht:(NSString *)s;此方法对数据库进行查询,其中code = 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时调用此方法,我可以访问该方法但我无法更改字符串值来自IBOutlets。我已经宣布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]];
}
}
我的问题是,如果我从其他类调用,我定义的方法不起作用 有人知道我必须做什么或者我不知道
答案 0 :(得分:1)
看起来您的IBOutlet连接已损坏。在customers
活动中创建-keyDown
的实例时,您的所有商店都没有连接。这就是为什么它被打破了。这不是继承的问题,而是面向对象的设计。您可能需要重新考虑您的功能如何相互通信。
要证明是否是这种情况(对不起,但我在阅读您的代码时遇到一些问题),请在-searcht:
函数中添加一条日志语句,看它是否存在:
NSLog(@"name1field: %@", name1);
我猜你会看到类似:name1field: (null)
更新了建议的解决方案
如果你有IBOutlets(这对我来说是一个可疑的决定),这意味着它在你的笔尖中实例化。您可能想要做的(假设您没有彻底改变代码的结构)是在NSSearchField
子类中创建一个插座,将其连接到您的nib中的customers
对象,并使用它,而不是创建customers
的新实例。
但这是一种创可贴解决方案。您可能想要了解一些design patterns used in Cocoa code。这可能会为您提供有关如何构建类的更好的想法。