我正在尝试复制 iOS Safari 书签系统。我有单独的书签在工作,而主集中的文件夹也在工作。我需要帮助,以便我可以在其他文件夹中拥有无限的文件夹。基本上,我现在的代码只能保存到 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
.
这就是我现在保存文件夹的方式。当用户在视图控制器中按下键盘上的完成按钮时,将调用此代码:
-(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 个文件夹堆栈?