我在这个名为array的视图上有一个MutableArray,有问题的对象是detailItem
,它的属性为rank
(int)。在这个视图中,有一个显示排名的文本字段,我希望能够通过更改排名来移动detailItem
上下MutableArray。
所以,例如,让我们说detailItem
的排名为3,索引值为2.如果我在文本字段中将其更改为3,我希望数组调整并将其向下移动一个地点。但是,当我输入rankField
(文本字段)的值时,它会崩溃应用程序,因为它会在我完成编辑之前自动更新该值。因此,如果我单击文本字段并写入23(删除2时计划)或只按删除(现在值为nil),应用程序将因未捕获的异常而崩溃。
以下是代码:
- (IBAction)rankFIeldTextChanged:(id)sender {
QueueMember *member = self.detailItem;
[self.array removeObjectAtIndex:self.detailItem.rank];
if (0<= [self.rankField.text intValue]<= self.array.count) {
[self.array insertObject:member atIndex:[self.rankField.text intValue]-1];
}
}
在数组大小和0之间设置文本值的if条件似乎没有效果。
btw这是在detailsViewController中,它通过push segue连接到主视图控制器。是否更有意义(或更好的编码)只是在细节中设置新的排名值并实际在mainviewcontroller.m中进行数组更改?
答案 0 :(得分:1)
问题是你试图一次做两个布尔语句(这不起作用)。将if语句更改为:
if (0< [self.rankField.text intValue] && [self.rankField.text intValue] < self.array.count) {
//Insert your object here
}
else
{
//Add object here
}
您当前的设置检查是否0<= [self.rankField.text intValue]
,对于所有大于或等于0的值,它将返回true。然后它检查结果(YES:1,NO:0),如果它小于或等于你的数组计数。如果您的数组中包含任何内容,那么它将始终返回true。所以基本上你的支票总是会回归真实。
因为它总是返回true,所以我可以检查数组对象号1000,你的if语句说得去,然后我检查并且数组说“没办法!”并崩溃你的应用程序。
编辑:更新了我的代码段,以考虑您的阵列插入行。
答案 1 :(得分:0)
我只是这样做
- (IBAction)rankFIeldTextChanged:(id)sender {
QueueMember *member = self.detailItem;
[self.array removeObjectAtIndex:self.detailItem.rank];
if ((0<= [self.rankField.text intValue])&&([self.rankField.text intValue]<= self.array.count)) {
if (self.array.count >([self.rankField.text intValue]-1)){
[self.array insertObject:member atIndex:[self.rankField.text intValue]-1];
}
}
}
你可能试图插入一个大于数组计数的索引。