-2

下面的代码应该做到这一点:无论当前的运动员在哪里,当你点击下一个按钮时,下面的代码就会被执行。它应该将当前运动员更改为数组中的下一个运动员,然后当它到达最后一个人时,它需要循环回 0(第一个对象)。它确实做到了这一点。当我到达数组的末尾时,它会再次转到第一个人,这是正确的,但从那时起将跳过数组中的最后一个对象。知道为什么吗?

 -(void)nextAthlete{

    NSUInteger index = [_athleteArray indexOfObject:_currentAthlete];

    Athlete *count = _athleteArray[index];

    NSLog(@"Current Athlete:%@ Index: %lu",count,(unsigned long)index);

    if(index < ((_athleteArray.count)-1)){
        index++;
        _currentAthlete = _athleteArray[index];
        _evalSelected = [self getMostRecentEval];
        [self updateInformation];
        NSLog(@"Index after being smaller than the array count: %lu",(unsigned long)index);
    }
    if(index == ((_athleteArray.count)-1)){
        _currentAthlete = _athleteArray[index];
            _evalSelected = [self getMostRecentEval];
            [self updateInformation];
        index=0;
        _currentAthlete = _athleteArray[index];
            NSLog(@"Index after being equal to array count: %lu",(unsigned long)index);
    }
    if(index > ((_athleteArray.count)-1)){
        index=0;
        _currentAthlete = _athleteArray[index];
    }
    self.title = [NSString stringWithFormat:@"%@'s Evaluation",_evalSelected.whosEval.full];


}

使用 jquery 重新加载具有更新数据的 div

我的页面上有一个可以就地编辑的链接。当输入框聚焦时,我想重新加载具有 id="<%=micropost.id%>" 的父 li 标签

   <script>
       $(document).ready(function(){
          $('#editing_yt_url_<%=micropost.id%>').focusout(function(){
          $('#<%=micropost.id%>').refresh();
          });
       });
  </script>

.refresh部分不工作。$('#<%=micropost.id%>').hide()将隐藏整个 li 标签,所以我知道它的响应,但我不知道刷新该标签的正确方法

4

3 回答 3

2

你不需要所有这些if陈述。您正在nextIndex使用模运算符,因此您不需要应用所有其他逻辑 - 设置index应该nextIndex就足够了。此外,由于它们不是 if..else 语句,因此在数组中倒数第二项的情况下,您将多次递增和包装索引。当第二个 if 块执行时,第三个也会执行,因此_currentAthlete在这种情况下将跳过最后一项。

无论如何,无需重复所有这些逻辑 - 使您的代码如下所示:

NSUInteger nextIndex = (index + 1) % _athleteArray.count;

Athlete *count = _athleteArray[index];
NSLog(@"Current Athlete:%@ Index: %lu",count,(unsigned long)index);
index=nextIndex;
_currentAthlete = _athleteArray[index];
_evalSelected = [self getMostRecentEval];
[self updateInformation];
self.title = [NSString stringWithFormat:@"%@'s Evaluation",_evalSelected.whosEval.full];

不过,这有点奇怪,因为您跳过了_selectedAthlete. 但我想你会在循环的最后一次迭代中回到它。

于 2013-09-11T02:01:44.413 回答
1

从您的评论“如果我从 5 中的第 3 位的运动员开始,它需要转到 4,然后是 5,然后是 0”,听起来您希望前进到下一个索引,将数组视为圆形。为此,您可以使用模运算符 ,%对于正数,它是余数

NSUInteger index = [_athleteArray indexOfObject:_currentAthlete];
NSUInteger nextIndex = (index + 1) % _athleteArray.count;

在您的情况下,您有 4 名运动员,因此index将在 0 -> 3 范围内。因此(index + 1)在 1 -> 4 范围内。除以 4 后取余数分别得到 1、2、3、0。nextIndex循环方式的“跟随”索引也是如此。

于 2013-09-11T01:21:23.113 回答
1
if(index < _athleteArray.count) 

需要是

if(index < _athleteArray.count - 1).

想想看——如果你的数组中有 4 个运动员,那么当 index = 3 时,你将输入 if 子句并将 index 增加到 4。

当您 _currentAthlete = _athleteArray[index]使用 index = 4 执行时,您会收到错误消息。

于 2013-09-11T01:10:14.047 回答