как получить доступ к переменной класса NSObject из NSMutableArray для сортировки

Я добавил несколько class Objects в NSMutableArray. Кажется, это сработало, однако я хотел бы теперь получить доступ к переменным, которые находятся внутри объекта класса, который я сохранил в массиве, однако теперь я сталкиваюсь с некоторыми ошибками.

Первоначально у меня есть NSDictionary записей, все из которых основаны на NSString. Цель метода, который я передаю этим NSArray из NSDictionary/s, также состоит в том, чтобы взять каждую запись в словаре и поместить ее в переменную правильного типа. Затем эти NSObject переменных передаются обратно туда, откуда они были вызваны.

Ниже приведен код, который я использую для достижения этой цели.

ответ.m

 // initalise NSOject Class
  SearchResultList *searchResultList = [[SearchResultList alloc]init];

 // Create mutableArray with compacity (compacity is based of the current array of NSDictionarys (entries are strings))
   NSMutableArray *searchObjectArray = [[NSMutableArray alloc] initWithCapacity:[filteredArray count]];

  // count to track progress of the array
   int myCount = 0;

  // for loop goes through the array passing each object in the array over to the search class object
   for (id obj in filteredArray) {

        // Pass current array object over to the NSObject Class Method, this method assigns the entires of the NSDictionary object to the variables of the object class coorect type values
          [searchResultList assignSearchData:filteredArray[myCount]];

         // This is where I capture the returning NSObject Class (at least I think thats whats happening.
           [searchObjectArray addObject:searchResultList];

         // increments count
            myCount ++;

    }

//..

Это метод класса, вызываемый внутри цикла for.

SearchResultList.m

//return is of type, SearchResultList which is the object class itself... not sure if this is 100% correct.
- (SearchResultList *)assignSeriesSearchData:(NSMutableDictionary*)tempDict
{

//add all of the NSDictionary entries into their own variables of the correct type such as

// initalize DOORID - NSInteger
    doorID = [[tempDict valueForKey:@"DOORID"] integerValue];

// initalize DOORDESC - NSString
    doorDesc = [tempDict valueForKey:@"DOORDESC"];

// initalize DOOROPEN - BOOL
    doorOpen = [[tempDict valueForKey:@"DOOROPEN"] boolValue];

 // initalize DOORLETTER - char
    doorLetter = [[tempDict valueForKey:@"DOORLETTER"] UTF8String];

//...

//then I return the NSObject Class to the place where it was called

return self;
}

Итак, отсюда я возвращаюсь в цикл for response.m, где я вызываю searchObjectArray addObject:searchResultList]; для захвата возвращаемого объекта класса.

На данный момент у меня есть два вопроса.

Во-первых, правильно ли я определяю класс NSObject

Во-вторых. После того как я добавил все объекты класса в массив, как я могу затем получить доступ к переменным определенного объекта в массиве?

Причина, по которой я задаю второй вопрос, заключается в том, что я хочу передать этот массив методу сортировки, который сортирует на основе одной или нескольких переменных объектов, находящихся в массиве.

Любая помощь будет принята с благодарностью.


person HurkNburkS    schedule 13.08.2012    source источник
comment
Если я добавлю NSObject *myobj= [searchObjectArray objectAtIndex:0]; NSLog(@"%@", myobj); после цикла for и добавлю точку останова, когда я наведу указатель мыши на myobj, я увижу все доступные переменные и их значения. Я просто не знаю, как получить к ним доступ по отдельности...   -  person HurkNburkS    schedule 13.08.2012


Ответы (2)


На ваш первый вопрос: вы должны выделить/инициировать новый экземпляр вашего класса SearchResultList в своем цикле, иначе вы просто будете повторно использовать и перезаписывать один и тот же объект. В своем вопросе вы продолжаете ссылаться на NSObject, что технически является подклассом NSObject, но на самом деле это экземпляр вашего собственного класса. (В качестве примечания я бы предложил использовать имя класса, такое как SearchResultItem, а не SearchResultList, поскольку на самом деле это не список, и это может сбить с толку кого-то, кто просматривает ваш код, но я оставил его так, как вы это сделали. )

NSMutableArray *searchObjectArray = [[NSMutableArray alloc] initWithCapacity:[filteredArray count]];

for (NSDictionary *obj in filteredArray) {
    SearchResultList *searchResultList = [[SearchResultList alloc] init];
    [searchResultList assignSearchData:obj];
    [searchObjectArray addObject:searchResultList];
}

Также обратите внимание, что, поскольку вы используете быструю итерацию для своего цикла, вам не нужен счетчик myCount, поскольку быстрая итерация извлекает следующий объект в вашем массиве для использования с каждой итерацией цикла.

Для вашего второго вопроса вам нужно сначала преобразовать объекты, выходящие из вашего массива, в ваш собственный класс (SearchResultList), чтобы получить доступ к определенному свойству. Например:

SearchResultList* myObj = (SearchResultList*)[searchObjectArray objectAtIndex:0];
int doorID = myObj.doorID;
person jonkroll    schedule 13.08.2012
comment
большое спасибо .. это мне очень помогло! он работает отлично... и бонусом является то, что я понимаю, что происходит :) благодаря количеству прочитанного и опробованного вчера... но еще раз спасибо за помощь! - person HurkNburkS; 14.08.2012

Вы можете получить доступ к свойствам NSObject, вызвав эту строку кода:

NSLog(@"%@", myobj.doorID);
person ashokbabuy    schedule 13.08.2012
comment
да, это то, о чем я думал, однако, когда я пытаюсь это сделать, я получаю сообщение об ошибке. Свойство «doorID» не найдено в объекте типа «NSObject *», однако просмотр объекта во время отладки показывает, что это значение явно находится в объекте, который я регистрирую. - person HurkNburkS; 13.08.2012