NSMutableIndexSet中的书签



尝试将书签页面保存在NSMutableIndexSet中,当点击按钮时,它会更改bookmarkButton图像,当页面翻转时,它更新bookmarkButton图片,但当我返回到书签页面检查书签页面时,它不会在书签页面上显示bookmark-Y图像。这意味着它没有保存已添加书签的页面。我该如何修复

- (void)buttonTapped:(id)sender {
if(isFirstTime == YES){
[_bookmarkButton setImage:[UIImage imageNamed:@"Bookmark-Y.png"] forState:UIControlStateNormal];
[self performSelector:@selector(SaveBookmark:) withObject:contentViewController.page afterDelay:0];
isFirstTime = NO;
} else {
[_bookmarkButton setImage:[UIImage imageNamed:@"Bookmark-N.png"] forState:UIControlStateNormal];
isFirstTime = YES;
}
}
- (void)SaveBookmark: (id)sender{
bookmarkIndex =[[NSMutableIndexSet indexSet] init];
[bookmarkIndex addIndex:currentIndex];
BOOL Bookmarked = [bookmarkIndex containsIndex:currentIndex];
}

- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed{
if (!completed)
{
return;
}
currentIndex = [modelArray indexOfObject:contentViewController.page];
[self displaycurrentIndex:currentIndex];
[self updatebookmarks:currentIndex];
}

- (void) updatebookmarks:(NSUInteger)currentIndex {
if (Bookmarked==YES){

[_bookmarkButton setImage:[UIImage imageNamed:@"Bookmark-Y.png"] forState:UIControlStateNormal];
} else {
[_bookmarkButton setImage:[UIImage imageNamed:@"Bookmark-N.png"] forState:UIControlStateNormal];
}
}

知道我在NSMutableIndexSet中保存书签时做错了什么吗。我们将不胜感激。

感谢

我在这里看到了一些问题。我将尝试解决所有这些问题:

bookmarkIndex = [[NSMutableIndexSet indexSet] init];-这是不正确的

应为:[NSMutableIndexSet indexSet][[NSMutableIndexSet alloc] init]

接下来,正如@Romain所说,无论它是否解决了这个问题,都应该将其初始化为类初始化或viewDidLoad方法中的一个属性。您不应该在每次添加时都重新初始化集合。

接下来,我不知道为什么在调用save方法时使用performSelector:withObject:afterDelay。这有什么原因吗?创建saveBookmark方法的更好方法如下:

- (BOOL)saveBookmark
{
if (!bookmarkIndex) {
bookmarkIndex = [NSMutableIndexSet indexSet];
}
if (currentIndex) {
[bookmarkIndex addIndex:currentIndex];
return [bookmarkIndex containsIndex:currentIndex];
}
return NO;
}

通过这种方式,您可以检查saveBookmark方法的返回值。如果它返回"否",那么您就知道currentIndex有问题,或者您的bookmarkIndex变量正受到程序另一部分的负面影响。在你的按钮点击:方法,然后你会保存这样的书签:

if (isFirstTime == YES) {
[_bookmarkButton setImage:[UIImage imageNamed:@"Bookmark-Y.png"] forState:UIControlStateNormal];
if ([self saveBookmark]) {
isFirstTime = NO;
} else {
NSLog(@"There was an error saving the bookmark");
}
} else {  ...code continues

如果没有别的,这至少可以帮助你诊断问题并追踪你的问题!

编辑:

如果您使用上面的代码,则实际上禁用了使用该布尔值来确定页面是否已添加书签。在您的updateBookmarks:method调用中,您应该检查当前索引的bookmarkIndex集,如下所示:

- (void) updatebookmarks:(NSUInteger)currentIndex {
if ([bookmarkIndex containsIndex:currentIndex]) {
[_bookmarkButton setImage:[UIImage imageNamed:@"Bookmark-Y.png"] forState:UIControlStateNormal];
} else {
[_bookmarkButton setImage:[UIImage imageNamed:@"Bookmark-N.png"] forState:UIControlStateNormal];
}
}

相关内容

  • 没有找到相关文章

最新更新