1

「ブックマーク/お気に入りに追加」機能を備えたiPhoneアプリを開発しています

ただし、これらのブックマークにはそれぞれ「ステータス」のサブタイトルまたはフィールドがあり、開いているjSonデータベースでは「ステータス」が常に更新されるため、ブックマークテーブルビューでユーザーが「更新」ボタンをクリックすると、にリクエストが送信されます。サーバーとすべてのブックマークの最新の「ステータス」を引き出します。

次に、ユーザーが別のビューをクリックすると、すべての新しいステータスがuserDefaultに保存されます。これは、「viewWillDisappear()」で次のように実行しました。

NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:myObject forKey:@"myServiceList"];
[defaults synchronize];

上記は正常に動作し、データが保存されます。

しかし、その後、ブックマークビューに戻って、もう一度他のビューをクリックすると、クラッシュします。次のコード行は渡されません(したがって、1回目は機能しますが、2回目は機能しません)。

[myDict setObject:[myService objectForKey:@"status"] forKey:@"status"];

userDefault APIを確認した後、問題を解決するために次のコード行を追加してみましたが、完全に機能します。

NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:myObject forKey:@"myServiceList"];
[defaults synchronize];
//I added the following
[NSUserDefaults resetStandardUserDefaults];

それでも問題は解決しますが、実際にはどのように解決するのかわかりません。ドキュメントには、「共有ユーザーのデフォルトオブジェクトに加えられた変更を同期し、メモリから解放する」と記載されています。

これは、「myServiceList」が使用中であり、再度使用する前にメモリから解放する必要があることを意味しますか?

誰かが私がこの問題を理解するのを手伝ってくれますか?

ありがとう!

編集:これが私のブックマークビューのviewWIllDisappear()です。ブックマークビューから他のビューに切り替えると問題ありません。ブックマークビューに戻ってもう一度他のビューに切り替えると、クラッシュします。

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    NSLog(@"start saving data");
    NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
    NSMutableArray * defaultArray = [[defaults objectForKey:@"myServiceList"] mutableCopy];
    for (NSString *key in self.tableContents) 
    {
        for(NSMutableDictionary *myService in [tableContents objectForKey:key])
        {
            for(NSMutableDictionary *myDict in defaultArray)
            {
                if([[myDict objectForKey:@"serviceNumber"] isEqualToString:[myService     objectForKey:@"serviceNumber"]])
                {
                    //The following line is where it will crash
                    [myDict setObject:[myService objectForKey:@"status"] forKey:@"status"];
                    NSLog(@"updated");
                    break;
                }
            }
        }
    }

    [defaults setObject:defaultArray forKey:@"myServiceList"];
    [defaults synchronize];
    //[NSUserDefaults resetStandardUserDefaults];
}
4

1 に答える 1