0

我已经添加了几个class ObjectsNSMutableArray. 它似乎有效,但是我现在想访问存储在数组中的类对象内部的变量,但是我现在遇到了一些错误。

最初,我有一个NSDictionary条目,它们都NSString基于我传递 /s 的方法的目的,即NSArray获取NSDictionary字典中的每个条目并将其放入正确类型的变量中。然后这个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 循环中调用的类方法

搜索结果列表.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是否正确捕获了类

其次,一旦我将所有类对象添加到数组中,我如何才能访问数组中特定对象的变量?

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

任何帮助将不胜感激。

4

2 回答 2

2

对于您的第一个问题:您应该在循环中分配/初始化您的SearchResultList类的一个新实例,否则您将只是重用和覆盖同一个对象。在您的问题中,您一直将 is 称为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;
于 2012-08-13T05:03:52.750 回答
0

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

NSLog(@"%@", myobj.doorID);
于 2012-08-13T04:52:25.803 回答