从 PLIST 中的 NSMutableArray 中删除项目

Posted

技术标签:

【中文标题】从 PLIST 中的 NSMutableArray 中删除项目【英文标题】:Remove item from NSMutableArray from PLIST 【发布时间】:2013-01-29 09:18:02 【问题描述】:

我有一个 plist,其中包含一些使用 arc4random () 随机抽取的测验项目,我想在显示后删除每个项目,以免重复问题,我尝试使用 [thisArray removeObjectAtIndex:r];,但是项目仍然显示。有什么想法吗?

NSString *path = [[NSBundle mainBundle] pathForResource:@"initialquestions" ofType:@"plist"];

NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:path]) 
    NSLog(@"The file exists");
    
else 
    NSLog(@"The file does not exist");


NSMutableArray *thisArray = [[NSMutableArray alloc] initWithContentsOfFile:path];
NSLog(@"The array count: %i", [thisArray count]);

for (int i = 0; i < [thisArray count]; i++) 

    id obj;
    int r = arc4random() % [thisArray count];
    if(r<[thisArray count])
        obj=[thisArray objectAtIndex:r];
    
    else
        //error message
    

     QuestionTitle.text = [[thisArray objectAtIndex:r] objectForKey:@"QuestionTitle"];

     [btnA setTitle:[[thisArray objectAtIndex:r] objectForKey:@"A"] forState:UIControlStateNormal];
     [btnB setTitle:[[thisArray objectAtIndex:r] objectForKey:@"B"] forState:UIControlStateNormal];
     [btnC setTitle:[[thisArray objectAtIndex:r] objectForKey:@"C"] forState:UIControlStateNormal];

     [thisArray removeObjectAtIndex:r];


【问题讨论】:

尝试在 for 循环中打印计数 我不知道为什么我没有考虑这个来测试我的循环是否正常工作,它确实谢谢你。由于我的 for 循环,数组本身从 5 倒数到 1。但是我想知道我可以让每个问题正确加载到循环内的 uilabel 和按钮中。您对此有什么建议吗? 【参考方案1】:

随着你的数组在缩小,你需要一个反向 for 循环:

for (int i = [thisArray count]-1; i > -1 ; i--) 
    ....

【讨论】:

反向循环比我创建的用于将 plist 中的项目从 5 减少到 0 的原始 for 循环做得更好,但是我仍然不知道如何制作每个这些项目中的一些出现在我的 uilabel(作为一个问题)和我的 uibuttons(作为三个答案)中,并在回答一个问题时转到下一个问题。我知道这与主题的标题不同,但任何方向都将不胜感激。 您需要使用thisArray 作为属性。以便在整个程序/方法中保持其值。并在回答问题时调用上述方法。每个答案都会调用上述方法,并且只会从thisArray 中删除一个问题。还是有些疑惑,可以问:) 太棒了,我没有意识到数组没有被保留,基本上每次都被重置。这一切都很好,但显然当数组变空时它会崩溃。我尝试使用:if (thisArray == 0) NSLog(@"Your array is empty"); ..但这不起作用。

以上是关于从 PLIST 中的 NSMutableArray 中删除项目的主要内容,如果未能解决你的问题,请参考以下文章

NSMutableArray 从 plist 返回 Null

从 NSMutableArray 更改为 .plist

UITableView + NSMutableArray 奇怪的行为

将 NSMutableArray 保存到 plist [关闭]

如何将 NSMutableArray 保存到 iPhone 的 plist 中

iOS:将两个 NSMutableArray 存储在 .plist 文件中