2013-02-14 86 views
2

我试图根据frame.origin.ytextFields排列数组。但是当我跑模拟器时,它卡住了。任何想法?按照frame.origin.y排序IBOutletCollection TextField数组

IBOutletCollection(UITextField) NSArray *textFields 

我的代码:

-(NSMutableArray *)bubbleSort:(NSMutableArray *) unsortedArray{ 
NSInteger i,j; 
//NSLog(@"%@",unsortedArray); 
for(i=0;i<unsortedArray.count;i++) 
    { 
    for(j=0;j<i;j++) 
    { 
     if(((UITextField *)[unsortedArray objectAtIndex:i]).frame.origin.y > ((UITextField *)[unsortedArray objectAtIndex:j]).frame.origin.y) 
     { 

      UITextField *temp=[unsortedArray objectAtIndex:i]; 
      [unsortedArray insertObject:[unsortedArray objectAtIndex:j] atIndex:i]; 
      [unsortedArray insertObject:temp atIndex:j]; 
     } 
    } 
    } 
    //NSLog(@"%@",unsortedArray); 
    return unsortedArray; 
} 
+0

它从哪里获得正好卡住?你试过调试它吗?任何例外?我还建议在代码中提取变量,这将有助于提高清晰度并使其更易于调试。 – 2013-02-14 03:00:23

+0

return语句不会被执行。循环迭代几次后挂起。没有例外。 – Harikrishnan 2013-02-14 03:09:24

+0

我几乎没有几分钟后就变坏了。 – Harikrishnan 2013-02-14 03:31:28

回答

2

像学习者说,你只是保持你的数组中插入的对象,所以你永远不会离开你的外部for循环。要交换两个元素,你可以使用

- (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2 

所以你的情况,你的if里面,你可以简单的写

[unsortedArray exchangeObjectAtIndex:i withObjectAtIndex:j]; 

Reference