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 文字列を保存する必要がある場合は、C 文字列をコピーするか、getCString:maxLength:encoding: を使用する必要があります。

また、絶対に使用しないでください+[NSString defaultCStringEncoding]。これは完全に信頼性が低く、一般に任意の文字列を表すことはできません。ドキュメントから:

一般に、このエンコーディングはめったに使用しないでください。

于 2012-06-03T22:15:08.920 に答える