0

我有以下代码从文本字段中读取信用卡号并将其存储在数据模型中。卡号在存储时是正确的,但后来当我尝试从中读取时,它变得乱码。现在我猜这是因为内存被回收并且不再有意义。

从标签设置卡号的代码:

        [cardInfo setCardNumber: [textField.text cStringUsingEncoding:[NSString defaultCStringEncoding]]];

数据模型中的代码:

    - (void) setCardNumber:(char *)number{
            cardNumber = number;
            //Value of cardNumber here is correct
    }

在我稍后使用该属性检索该值之前,一切看起来都是正确的。

4

1 回答 1

3

文档中-[NSString cStringUsingEncoding:]

保证返回的 C 字符串仅在接收器被释放或当前自动释放池被清空之前有效,以先发生者为准。您应该复制 C 字符串或使用 getCString:maxLength:encoding: 如果它需要存储超过此时间的 C 字符串。

此外,您永远不应该使用+[NSString defaultCStringEncoding]. 它完全不可靠,通常不能表示任意字符串。从文档:

一般来说,这种编码应该很少使用,如果有的话

于 2012-06-03T22:15:08.920 回答