2011-07-29 52 views
3

我的NSArray说100 NSManagedObjects,我需要的是分成包含10个NSArray对象各占论文NSManagedObjects 10的NSArray,我将如何实现这一目标?较小NSArrays组拆分NSArray的寻呼

我打算做一些分页,这对我很好。

+1

假设你只是想在一个数组来传递,每一次有相同的代码工作,为什么不把它传递一个NSRange长度10和位置[为准]的,与原始未修改的NSArray沿,并有基于NSRange的页面工作代码,而不是绝对索引? –

+0

听起来很完美 - 我该如何做到这一点? – Slee

+4

这几乎是一个完全重复的http://stackoverflow.com/questions/6852012/what-is-an-easy-way-to-break-an-nsarray-with-4000-objects-in-it-into-多AR。答案是重复使用'subArrayWithRange:',并有一个移位范围。 –

回答

2

东西沿着这些路线应该工作,而不是把它分成不同的阵列

//make a new range for each page 
NSRange myRange = NSMakeRange(10, 10); 
NSArray * myArray = [NSArray array]; 

//...pass both into a function 
for (int i = myRange.location; i < myRange.location + myRange.length; i++) { 
    //stuff with the array elements 
    [[myArray objectAtIndex:i] doSomething]; 
} 
5

你是如何得到这些NSManagedObjects?如果您使用的是NSFetchRequest,则可能需要保持这一点,并且一次只能获得10个结果。

1

的它没有一个内胆,但这将数组分割为多个页面:

NSArray *arrayToSplit = ... 

int pageSize = 50; 
NSMutableArray *arrayOfPages = [NSMutableArray new]; 

NSRange range = NSMakeRange(0, pageSize); 

while (range.location < arrayToSplit.count) { 
    if (range.location + range.length >= arrayToSplit.count) 
     range.length = arrayToSplit.count - range.location; 

    [arrayOfPages addObject:[arrayToSplit objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:range]]]; 

    range.location += range.length; 
} 
3

这里是我的代码:

[object splitArrayWithArray:arrayWith100Objects rangeNumber:10];

- (NSArray*) splitArrayWithArray:(NSArray*)rawArray rangeNumber:(int)rangeNumber{ 
    int totalCount = rawArray.count; 
    int currentIndex = 0; 

    NSMutableArray* splitArray = [NSMutableArray array]; 

    while (currentIndex<totalCount) { 
     NSRange range = NSMakeRange(currentIndex, MIN(rangeNumber, totalCount-currentIndex)); 
     NSArray* subArray = [rawArray subarrayWithRange:range]; 
     [splitArray addObject:subArray]; 
     currentIndex +=rangeNumber; 
    } 
    return splitArray; 
}