0

iOSSafariブックマークシステムをコピーしようとしています。個々のブックマークが機能し、メインセットのフォルダが機能しています。他のフォルダに無制限のフォルダを作成できるように、作成のサポートが必要です。基本的に、私のコードは現在1つのフォルダーにしか保存できないため、メインフォルダー→フォルダー1→フォルダー2ですが、それを超えることはできません。フォルダ1を作成した後、アプリを終了して何かを保存する必要があります。Xcodeは私にこのエラーを与えます:

WebKit discarded an uncaught exception in the webView:shouldInsertText:replacingDOMRange:givenAction: delegate: <NSInternalInconsistencyException> -[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object

フォルダ辞書は次のようになります。

NSDictionary *NewFolderDict = @{
    @"Title" : NewFolderTitle,
    @"isFolder" : @YES ,
    @"Bookmarks" : @[],
    @"UUID" : [self uuidString]
};

Titleはエントリの名前、isFolderはエントリがフォルダであるかどうか、ブックマークはブックマークまたはそれ以上のフォルダの配列であるかどうかです。

メイン全体NSArrayがにありNSUserDefaultsます。

これが私が今フォルダを保存している方法です。このコードは、ユーザーがViewControllerのキーボードの完了ボタンを押したときに呼び出されます。

-(void)addDictionary:(NSDictionary *)FolderDictionary toFolder:(NSMutableDictionary*)toFolder {

    NSMutableArray *bookmarks = [[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] arrayForKey:@"bookmarks"]];
    for (int i=0; i<[bookmarks count]; i++) {

        NSMutableDictionary *Bookmark = (NSMutableDictionary *)[bookmarks objectAtIndex:i];

        if ([[Bookmark objectForKey:@"isFolder"] boolValue] == YES) {

            if ([[Bookmark objectForKey:@"UUID"] isEqualToString:[toFolder objectForKey:@"UUID"]]) {
                NSLog(@"MATCH");
                NSMutableArray *test = (NSMutableArray *)[Bookmark objectForKey:@"Bookmarks"];
                [test addObject:FolderDictionary];

            }

        }

    }
    NSLog(@"%@",bookmarks);
    [[NSUserDefaults standardUserDefaults] setObject:bookmarks forKey:@"bookmarks"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    [bookmarks release];

}

これは、それがフォルダであるかどうか、および追加するのに適切なフォルダであるかどうかを確認するだけです。どうすれば100%動作させて保存し、10個のフォルダースタックのように、下に移動できるフォルダーの数に制限がないようにするにはどうすればよいですか?

4

1 に答える 1

1

ここでの問題は、ユーザーのデフォルトからデータをフェッチするとき、それらは不変であるということです。つまり、またはのインスタンスであり、NSArrayまたはのインスタンスでNSDictionaryはありませNSMutableArrayNSMutableDictionary。対象のオブジェクトのクローンを作成することもできます。つまり、オブジェクトを呼び出しmutableCopyて、データ構造内でそれらを置き換えます。

于 2012-10-14T08:12:41.587 に答える