Как прервать, когда цикл for достигает NSNotFound из NSArray - PullRequest
2 голосов
/ 25 октября 2011

У меня есть nsmutablearray, к которому я добавляю объект в цикле for из nsarray. Я хочу, чтобы он добавил объект, пока не достигнет NSNotFound в indexOfObject: from NSArray. Массив находится внутри цикла for для извлечения строки из каждого индекса.

Мой код:

NSInteger untilNotFound = NSNotFound;
NSUInteger index = [array indexOfObject:string];

for (index; index < untilNotFound; index ++)
{           
    [self.mutablearray addObject:[array objectAtIndex: index]];
}

Edit:

for (string in array)
{
NSComparisonResult *result = [string compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) 
                              range:NSMakeRange(0, [searchText length])];

if (result == NSOrderedSame)
{
            NSInteger index;
            for (index =[array indexOfObject:string]; (index < [array count] && index < 100 && index!= NSNotFound); index ++)
            {
                [self.mutablearray addObject:[array objectAtIndex: index]];         

            }

break;

}

}

EDIT.

Мой предыдущий код, который работает, находится внутри if (result == NSOrderedSame). Мне просто интересно, есть ли какое-нибудь более приятное и простое в использовании решение для извлечения индексов непосредственно перед тем, как оно достигнет NSNotFound:

        NSUInteger new = [array indexOfObject:string];

        NSString *last = [array lastObject];

        NSUInteger total = [array indexOfObject:last];

        NSUInteger newmax = new + 10;

        NSUInteger totalminus = total - 11;


        if (newmax <= totalminus )

        {

            [self.mutablearray addObject:string];

            [self.mutablearray addObject:[array objectAtIndex:new + 1]];

            [self.mutablearray addObject:[array objectAtIndex:new + 2]];
            [self.mutablearray addObject:[array objectAtIndex:new + 3]];
            [self.mutablearray addObject:[array objectAtIndex:new + 4]];
            [self.mutablearray addObject:[array objectAtIndex:new + 5]];
            [self.mutablearray addObject:[array objectAtIndex:new + 6]];
            [self.mutablearray addObject:[array objectAtIndex:new + 7]];
            [self.mutablearray addObject:[array objectAtIndex:new + 8]];
            [self.mutablearray addObject:[array objectAtIndex:new + 9]];
            [self.mutablearray addObject:[array objectAtIndex:new + 10]];
        }

        else 
        {
            [self.mutablearray addObject:string];
        }

Ответы [ 4 ]

6 голосов
/ 25 октября 2011

Это не так, как NSArray или NSNotFound работают. Попытка получить доступ к объекту после окончания NSArray вызовет исключение. Есть ли конкретная причина, почему вы хотите сделать это таким образом? Гораздо проще использовать быстрое перечисление:

for (id object in array) {
    [self.mutablearray addObject:object];
}

Редактировать: Я вижу из ваших других комментариев, что вы хотите ограничить это максимум 100 объектами, добавляемыми в изменяемый массив. Это достаточно просто:

NSUInteger count = 0;
for (id object in array) {
    [self.mutablearray addObject:object];
    count++;
    if (count >= 100) break;
}
2 голосов
/ 25 октября 2011

Похоже, вы пытаетесь создать совокупное подмножество.Попробуйте это:

for(NSInteger index = [array indexOfObject: string]; ((index <  [array count]) &&
                                                      (index <= 100)           &&
                                                      (index != NSNotFound))   ;  index++)
{
    [self.mutablearray addObject: [array objectAtIndex: index]];
}

Или, если вы просто делаете строгое подмножество, попробуйте это:

NSInteger startIndex = [array indexOfObject: string];
NSInteger endIndex = MIN([array count], 100);
if(startIndex != NSNotFound)
{
    self.mutablearray = [array subarrayWithRange: NSMakeRange(startIndex, endIndex)] mutableCopy];
}
1 голос
/ 25 октября 2011

NSNotFound определяется следующим образом

enum {NSNotFound = NSIntegerMax};

так что вы будете получать доступ к недопустимым индексам в вашем массиве.

0 голосов
/ 25 октября 2011
for (id obj in array){
 [self.mutableArray addObject:obj];
}

Это будет выполняться до тех пор, пока в массиве не появятся объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...