2013-02-14 46 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