Objective-C: получение индекса объекта в массиве - PullRequest
1 голос
/ 14 февраля 2012

Я новичок в программировании на Obj C, поэтому я начну с начала. У меня есть массив с некоторыми элементами NSNumber и NSString, я хочу заменить элементы NSString на элементы NSNumber.Я решил сделать это с помощью for in, чтобы получить новое значение NSMutableArray для всех элементов и NSMutableIndexSet их индексы, но когда я сделал это, я столкнулся с проблемой, вот он, я показываю вам свой код и журнал.

NSArray *oneMoreStack = [program copy];
NSLog(@" stack=%@",oneMoreStack);
NSLog(@" show me index ind=%@",[oneMoreStack indexOfObject:@"x"]);
NSMutableIndexSet *myVarIndexesSet;
NSMutableArray *myVarsArray;


for (id myVarConst in oneMoreStack) {
    if([myVarConst isKindOfClass:[NSString class]])
    {
        if([myVarConst isEqualToString:@"x"]){
            [myVarsArray addObject:myVarConst];
            NSLog(@"obj x=%@",myVarConst);
            [myVarIndexesSet addIndex:[oneMoreStack indexOfObject:myVarConst]];
            NSLog(@"ind x=%@",[oneMoreStack indexOfObject:myVarConst]);

        } 
}

Когда я запускаю его, журнал показывает мне:

Calculator[6306:f803]  stack=(
    x,
    2,
    "+"
)
Calculator[6306:f803]  show me index ind=(null)
Calculator[6306:f803] obj x=x
Calculator[6306:f803] ind x=(null)
then crash [NSMutableArray replaceObjectsAtIndexes:withObjects:]: index set cannot be nil

Итак, мой вопрос: почему [oneMoreStack indexOfObject:myVarConst] возвращает null?Как я могу это исправить?Благодарю.Я не упоминал этот код раньше, потому что думаю, что проблема заключается в получении индексов.

после того, как предыдущая часть кода проходит эту часть:

[stack replaceObjectsAtIndexes:[myVarIndexesSet copy] withObjects:[myVarsArray copy]]; 

после этого сбоя с отчетом об ошибках, о котором я упоминал ранее.Благодарю.

1 Ответ

4 голосов
/ 14 февраля 2012

[oneMoreStack indexOfObject:myVarConst] возвращает NSUInteger, примитивный тип, а не объект.

В вашем NSLog вы используете% @, который говорит: «Эй, возьми этот объект, который я передаю в качестве аргумента,позвоните -description и распечатайте ".К счастью, NSUInteger, который вы передаёте, оказывается равным 0, NSLog считает, что это нулевой объект, и вы не аварийно завершаете работу.Если вызов -indexOfObject: возвращает не-0, вы, скорее всего, потерпите крах.

Попробуйте вместо этого:

// For iOS
NSLog(@" show me index ind=%u", [oneMoreStack indexOfObject:@"x"]);

или

// For 64-bit and 32-bit Mac OS X
NSLog(@" show me index ind=%lu", (unsigned long)[oneMoreStack indexOfObject:@"x"]);

Вы можете узнать большео форматах строк в: Форматирование строковых объектов

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