- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试查看加载了 NSMutableArray 的 NSMutableDictionary,但我把它弄乱了,而且我不知道怎么办。我正在尝试加载更大的游戏问题列表,如果级别不正确则将其删除。在尝试删除之前我不会收到错误消息。任何人都可以看到这段代码中的缺陷吗?我将非常感激!
谢谢
~G
{
NSUserDefaults *settings = [NSUserDefaults standardUserDefaults];
NSString *GameLevel = [[NSString alloc] initWithFormat: [settings objectForKey:kLevelKey]];
NSBundle *Bundle = [NSBundle mainBundle];
NSString *PListPath = [Bundle pathForResource:@"questions" ofType:@"plist"];
NSMutableDictionary *Dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:PListPath];
self.QuestionDetailsByLevel = Dictionary;
[Dictionary release];
NSMutableArray *Components = [[NSMutableArray alloc] initWithArray:[QuestionDetailsByLevel allKeys]];
self.QuestionsByLevel = Components;
int QuestionCount = [self.QuestionsByLevel count] - 1;
for (int j = 0; j < QuestionCount - 1; j++)
{
NSString *SelectedQuestion = [self.QuestionsByLevel objectAtIndex:j];
NSMutableArray *Array = [QuestionDetailsByLevel objectForKey:SelectedQuestion];
self.QDetailsByLevel = Array;
NSString *level = [[NSString alloc] initWithFormat:[self.QDetailsByLevel objectAtIndex:Level]];
if (level != GameLevel)
[QuestionsByLevel removeObjectAtIndex:j];
}
}
最佳答案
除了其他人提到的其他问题外,让我们重点讨论为什么会出现越界错误。
这是相关的代码。
for (int j = 0; j < QuestionCount - 1; j++)
{
NSString *SelectedQuestion = [self.QuestionsByLevel objectAtIndex:j];
// ... snip ...
if (level != GameLevel) //Always happening in your current code
[QuestionsByLevel removeObjectAtIndex:j];
}
让我们看看这段代码经过几次迭代后会发生什么。
第一次迭代:
j == 0
self.QuestionsByLevel == [Q1, Q2, Q3, Q4, Q5]
SelectedQuestion = QuestionsByLevel[0] // Q1
// The following happens because you call removeObjectAtIndex:0
QuestionsByLevel = [Q2, Q3, Q4, Q5]
第二次迭代:
j == 1
self.QuestionsByLevel == [Q2, Q3, Q4, Q5]
SelectedQuestion = QuestionsByLevel[1] // Q3
// The following happens because you call removeObjectAtIndex:1
QuestionsByLevel = [Q2, Q4, Q5]
第三次迭代:
j == 2
self.QuestionsByLevel == [Q2, Q4, Q5]
SelectedQuestion = QuestionsByLevel[2] // Q5
// The following happens because you call removeObjectAtIndex:2
QuestionsByLevel = [Q2, Q4]
第四次迭代:
j == 3
self.QuestionsByLevel == [Q2, Q4]
SelectedQuestion = QuestionsByLevel[3] // CRASH!!!!
你能看出问题所在吗?您的 for 循环假设您将通过索引访问对象,但每次迭代之后,您都会从数组中删除一些内容,这会移动该点之后的所有索引。您不应该调用 removeObjectAtIndex:
,因为您试图同时遍历该数组。
如果您只是想跳过特定对象,则可以在到达该对象时调用“继续”。如果您确实想将其从数组中删除,只需调用 [QuestionsByLevel removeObject:GameLevel]
即可。或者任何对您的情况有意义的事情。但请在遍历数组之前执行此操作。
关于objective-c - NSMutable 数组 - objectAtIndex : index beyond bounds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1659423/
假设我们有一个简单的 NSDictionary 类,它的对象之一可以是 NSMutableDictionary 对象吗?当我们编辑 NSMutableDictionary 对象中的值时,我们只是编辑
由于我对 obj c 和 NSMutable 数组的完全误解,我最近提出的一些骨头问题吸引了一些聪明人的回答,这是可以理解的。因此,我查阅了我拥有的一本书和 Google,看来我可能不应该编程,因为我
我有一个 NSMutableArray: NSMutableArray *temp = //get list from somewhere. 现在有一个方法 objectAtIndex 返回指定索引处
我正在使用 NSMutable 数组作为 UITableView 的数据源。我正在从数据库中获取值并将其添加到可变数组中。当 View 加载时,我用可变数组填充 TableView 并且加载正常。稍后
我有一个 tableView,我正在尝试用数据填充它。我正在为函数内的数组赋值。所有内容都会保存起来,直到它离开 searchWithLocation 函数。查看日志让我认为这与排序有关,就像我没有足
我正在实现一个简单的计算器。 每次用户单击数字按钮时,sender.tag 都会附加到一个名为 displayString 的不可更改字符串,然后显示在屏幕上。 可变字符串以 40 大小开始。 奇怪的
我有一个 NSMutableArray 存储这样的 int 值 [self.destinationPostionPointer addObject:[NSNumber numberWithInt:0]
我正在开发一个 iPad 应用程序,对于这个应用程序,我有一个功能如下:- -(void)testcurrentest:(NSMutableDictionary *)keydictionary{
我已经用一种方法创建了值并将其添加到 NSMutable 数组中。下面是代码 -(void)setupSegmentButtons { NSInteger numControllers = 7; NS
我是 objective-c 的新手,我正在创建一个保存记录的应用程序。当我单击保存按钮时,我尝试创建一个添加方法,但当您按下按钮时它不会保存数据,或者如果它保存了它也不会显示它。数据显示在 tabl
我在 viewController(UITableViewController 的子类).h 文件中定义了两个 NSMutableString 对象: NSMutableString *firstNa
我尝试在方法中将对象添加到 NSMutable 数组中,但不断收到错误。如果我在 init 中添加对象,它就会起作用。在我尝试执行代码之前,它并没有说明有什么问题。 这是在 #import 的下面,我
我需要一些有关如何分配、保留对象的信息。 例如,如果我们有两个 View Controller 并且需要将数组数据从 viewcontrlr 1 传递到 viewContrl 2,我们如何将对象从 V
我一直在阅读一些关于订购 NSMutable 数组的文章,但在让它工作时遇到了问题,本质上我在一个 TableView 中有许多条目,可以添加无限量但我需要通过 NSMutable 订购它们包含数值的
我有一个使用 NSMutableDictionary 的类。该字典包含自定义类“appStrings”的 40-60 个对象。现在每次我使用这个类时,我只是初始化字典,调用我的 initDiction
我想在每次单击按钮时将数据存储在 NSMutableDictionary 中的键值对中,并将该字典存储在 NSArray 中。 问题 - 新数据替换了该数组中的旧数据 代码- - (void)view
我有一个线程应用程序。我正在运行一个后台线程,在其中填充表格单元格,并且在同一屏幕中,当我更改日期并单击“确定”按钮时,它将调用一个方法,在该方法中它将删除数组中的所有对象(该方法用于用于显示表格单元
XML 解析器正在尝试分配其委托(delegate)的名为 masterCodeList 的 NSMutable 数组。从下面的代码中,您将看到此操作失败了。 (我是个新手。) if (dataC
祝你今天过得愉快, 根据 NSMutableArray 值将表格 View 单元格中的每个按钮设置为不同值的最佳方法是什么? 我可以将值放入数组和 NSlog 中,它会在 xcode 控制台中很好地显
我正在尝试将所有 cell.img.tag 添加到我的 nsmutable 数组中。但是,我尝试了多种方法来执行此操作,例如 for 循环,但每次结果都不正确。我需要将每个单独的标签添加到 NSMut
我是一名优秀的程序员,十分优秀!