[OK]を、私はそれと戦って最後の8時間を費やした - それはちょうど私の外に思われる。オブジェクトの割り当てが解除されます - なぜですか?どこ?
- (void)updateUserDefaults
{
NSMutableDictionary *viewControllerDetails = [[NSMutableDictionary alloc] initWithCapacity:4];
[viewControllerDetails setObject:[NSNumber numberWithInt:OOVenueClassControllerType] forKey:@"classType"];
[viewControllerDetails setObject:self.searchTerm forKey:@"searchTerm"];
[viewControllerDetails setObject:self.searchLocation forKey:@"searchLocation"];
//----- the next two lines cause the problem
NSString *res = [[NSString stringWithFormat:@"%@",[searchResults xmlString]] retain];
[viewControllerDetails setObject:res forKey:@"searchresults"];
//-----
NSMutableArray *viewControllersList = [NSMutableArray array] ;
[viewControllersList addObject:viewControllerDetails];
NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];
//the following line causes the error
[defs setObject:viewControllersList forKey:kViewControllersKey];
[defs synchronize];
[res release];
}
注the next two lines cause the problem
とブロック:ここに私の完全な(関連)のコードです。最初は別の文字列を作成しませんでしたが、問題を解決しようとしている間に後で追加しました。
これらの2行をコメントアウトすると、すべて正常に動作します。私は背中に入れた場合、私は
- [CFString class]: message sent to deallocated instance 0xa1a9000
を得る何かが私はuserdefaultsに入れしようとしている文字列が間違っていますか?その文字列はかなり大きい(約200,000文字)が、私は過去のユーザーデフォルトでさらに長い文字列を格納していました。
アプリをアンインストールすると、すべて正常に機能することにも注意してください。しかし、それ以降の実行では、問題が発生します。
だから、どのように、なぜ、どこで文字列が割り当て解除されるのですか?私は明示的にretain
を追加しましたが、それでも助けにはなりません。私は何が欠けていますか?
編集:だけ実現私はエラーがライン上
[defs setObject:viewControllersList forKey:kViewControllersKey];
を投げていると言うのを忘れても、一般的な情報については、searchResults
の方法- (NSString *)xmlString
は、名前の意味を正確に何を行いますとXML文字列を作成しますそのオブジェクトからの情報
編集2:私はその文字列に何かをやってみました - zlibのを使用して圧縮し、NSData
に変換 - しかし、データ型に関係なく、その特定のオブジェクトの割り当てが解除されます。それは文字列のサイズで何かする必要がありますか?
問題は「[searchResults xmlString]」だと思われますが、これはコードのどこにも表示されません。それを使用する他のコードを表示できますか? – Louis
@ルイス:いくつかの追加情報で質問を更新しました –
'kViewControllersKey'はどのように定義されていますか? – Joe