2016-10-13 12 views
0

私はこのような忙しい状況に陥っています。 見て、あなたは助けることができるかどうか教えてください...NSDataからのUnArchivingの後、My Objectsデータメンバ(NSString *)の値が「0x7fc0ab73d040」に汚染されました

ここ

私はNSUserDefaultsに保存、私のCustomObjects(NSCoderを実装している「アラームオブジェクト」)を使用しています

AlarmObjectは、一つの特性(NSStringの*「)tuneAddressを持っています「

のような値を有する "曲/アラーム%20clock%20ringtones%20-%20free%20download。%20Mp3%20Alarm%20clock%20tones、%20sounds%20および%20ringtones%20for%%の20phones.mp3 20mobile"

k今このようなアドレス(%20)で解決された空白を持つのは良くありませんが、どういうわけかこれを変更することはできません。それはまだ私のコントロール下にないサーバーから来ています。 「tuneAddress」とするときに上に示したように、私は適切な値で「NSKeyedArchiver archivedDataWithRootObject」を使用してNSUserDefaultsにいくつかのオブジェクトを追加する試みが戻っ「NSKeyedUnarchiver unarchiveObjectWithData」を通じて、それを持っている時はいつでも

まあ、 創刊ここ問題があります。

ここでは、 'tuneAddress'の値を '0x7fc0ab73d040'として戻します。 それを見てくださいあなたはこれについて何かを言うことができる場合..?私はそれがここに

エラーEXC_BAD_ACCESS(コード= EXC_i386_GPFLTを)明らかに
[encoder encodeObject:self.tuneLocalAddress forKey:@"tuneLocalAddress"]; 

を停止し、 "NSKeyedArchiver archivedDataWithRootObject" を通じて戻ってそれをアーカイブしようとすると、

第二の問題は最初のものに依存しています。ここで

は私がAlarmObject

ここ
[[NSUserDefaults standardUserDefaults] setObject:[newString stringByReplacingOccurrencesOfString:@" " withString:@"%20"] forKey:TuneChoosenForAlarm_Key]; 

AlarmObject * newAlarmObj = [[AlarmObject alloc] init]; 
newAlarmObj.tuneLocalAddress = [[NSUserDefaults standardUserDefaults] objectForKey:TuneChoosenForAlarm_Key]; 

NSMutableArray * newArray = [[NSMutableArray alloc] initWithObjects:newAlarmObj, nil]; 

for (AlarmObject * alarmObj in self.alarmsArray) { 
     [newArray addObject:alarmObj]; 
} 
self.alarmsArray = newArray; 

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self.alarmsArray]; 
[[NSUserDefaults standardUserDefaults] setObject:data forKey:AlarmsDataDictonaryKey]; 
+0

http://stackoverflow.com/questions/7920071/how-to-url-decode-in-ios-objective-cこれを使用して通常の文字列に変換し、アーカイブ/アーカイブ解除を実行します。 –

+0

コードを貼り付けてください。 –

+0

保存するデータとデータの種類。 @vadian @ –

答えて

0

指す文字列を保存する方法はほとんどのショーですが、私は間違いがベースレベルにあった、その理由を発見しました。 'AlarmObject'を作成する際には、ここで私が間違っていた場所のメモリプロパティ "assign"を使って 'tuneLocalAddress'を作成しました。

ARCを使用していて、そのオブジェクトが使用されるまで、メモリ内のいくつかのプロパティ(tuneLocalAddress)の値を保持したい場合は、hereから少し考えて 'retain'または 'strong'を使用する必要があります。

ご理解いただければ幸いです。 申し訳ありませんが、文法上の間違いがあります。

関連する問題