我的NSArray
说100 NSManagedObjects
,我需要的是分成包含10个NSArray
对象各占论文NSManagedObjects
10的NSArray
,我将如何实现这一目标?较小NSArrays组拆分NSArray的寻呼
我打算做一些分页,这对我很好。
我的NSArray
说100 NSManagedObjects
,我需要的是分成包含10个NSArray
对象各占论文NSManagedObjects
10的NSArray
,我将如何实现这一目标?较小NSArrays组拆分NSArray的寻呼
我打算做一些分页,这对我很好。
东西沿着这些路线应该工作,而不是把它分成不同的阵列
//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];
}
你是如何得到这些NSManagedObjects
?如果您使用的是NSFetchRequest
,则可能需要保持这一点,并且一次只能获得10个结果。
的它没有一个内胆,但这将数组分割为多个页面:
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;
}
这里是我的代码:
[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;
}
假设你只是想在一个数组来传递,每一次有相同的代码工作,为什么不把它传递一个NSRange长度10和位置[为准]的,与原始未修改的NSArray沿,并有基于NSRange的页面工作代码,而不是绝对索引? –
听起来很完美 - 我该如何做到这一点? – Slee
这几乎是一个完全重复的http://stackoverflow.com/questions/6852012/what-is-an-easy-way-to-break-an-nsarray-with-4000-objects-in-it-into-多AR。答案是重复使用'subArrayWithRange:',并有一个移位范围。 –