如何从NSMutableArray访问NSObject类变量进行排序

时间:2012-08-13 03:47:26

标签: iphone objective-c ios nsmutablearray nsobject

我已在class Objects中添加了多个NSMutableArray。它似乎已经工作但我想现在访问我已经存储到数组中的类对象内的变量,但是我现在遇到了一些错误。

最初我有一个NSDictionary个条目全部NSString基于我传递的方法的目的NSArray / s NSDictionary也是在字典中输入并将其放入正确类型的变量中。然后将NSObject个变量传递回调用它的位置。

以下是我用来实现此目的的代码。

response.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;
}

所以从这里开始,我最终回到 response.m 的for循环中,我调用searchObjectArray addObject:searchResultList];来捕获返回的类对象。

此时我有两个问题

首先,我正在正确捕捉NSObject班级

第二个,一旦我将所有类对象添加到数组中,我怎么能访问数组中特定对象的变量?

我问第二个问题的原因是因为我想将这个数组传递给一个排序方法,该排序方法根据数组中对象的一个​​或多个变量进行排序。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

您可以通过调用以下代码行来访问NSObject属性:

NSLog(@"%@", myobj.doorID);