0

我定义了一个 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);

我究竟做错了什么?我应该用“静态”定义结构吗?

谢谢!

4

2 回答 2

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 版本的支持)。

于 2013-01-08T17:58:54.987 回答
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];
}

如果我没有提醒您在使用全局变量时应该认真重新考虑您的设计,那我就是失职了。

于 2013-01-08T17:59:26.717 回答