我定义了C(Objective-C)结构:
struct ResultadoVentaPUP{
NSString *autenticadoPorPin1;
NSString *autenticadoPorPin2;
NSString *tipoPago;
NSString *importe;
};
然后我声明一个这种类型的变量全局(在文件的顶部):
ResultadoVentaPUP resven;
在函数中,我为此结构设置了值,例如:
resven.importe=@"12.45";
但是当我尝试从同一个文件中查看另一个函数中“importe”的内容时,ir返回(null)。
NSLog(@"Result: %@",resven.importe);
我做错了什么?我应该用'static'定义结构吗?
谢谢!
答案 0 :(得分:2)
现在将Obj-C对象存储在C结构中是一个相当糟糕的想法,无论如何,使用ARC(自动引用计数),它甚至不再允许(如果你这样做,编译器会抱怨)。为什么不使用对象呢?如果您不想使用评估器方法,因为您担心开销,只需使用带有公共ivars的对象。公共ivars是不好的恕我直言,但结构与公共ivars的对象几乎相同。
@interface ResultadoVentaPUP : NSObject
{
@public
NSString * autenticadoPorPin1;
NSString * autenticadoPorPin2;
NSString * tipoPago;
NSString * importe;
}
@end
@implementation ResultadoVentaPUP
@end
ResultadoVentaPUP * resven;
void someFunction () {
resven = [[ResultadoVentaPUP alloc] init];
resven->importe = @"12.45";
}
void someOtherFunction () {
NSLog(@"Result: %@",resven->importe);
}
如果您使用ARC,此代码也可以很好地工作,并且在不久的将来,每个项目迟早都应该迁移到ARC(只要它可以放弃对没有ARC支持的OSX / iOS版本的支持)。
答案 1 :(得分:0)
也许你的声明应该是struct ResultadoVentaPUP resven;
。这对我有用:
#import <Foundation/Foundation.h>
struct ResultadoVentaPUP{
NSString *autenticadoPorPin1;
NSString *autenticadoPorPin2;
NSString *tipoPago;
NSString *importe;
};
struct ResultadoVentaPUP resven;
void func1() {
resven.importe = @"12.45";
}
void func2() {
NSLog(@"Result: %@", resven.importe);
}
int main(int argc, char *argv[]) {
NSAutoreleasePool *p = [[NSAutoreleasePool alloc] init];
func1();
func2();
[p release];
}
如果我不提出任何时候你使用全局变量的话,我会认真地重新考虑你的设计,那将是我的疏忽。