【问题标题】:creating an array of NSObject classes创建一个 NSObject 类的数组
【发布时间】:2012-08-12 23:44:49
【问题描述】:

我有一个NSObject 类,我也在其中发送一个NSDictionary 对象,然后该类对象将NSDictionary 中的所有条目设置为它们的本机类型,它们是NSObject 类中的变量。

然后我想将这个 NSObject 类传递给它自己的 NSMutableArray 但是当发生这种情况时我的应用程序崩溃了。

以下是调用NSObject 类然后尝试将其设置为NSMutableArray 的代码。

NSArray *filteredArray = parsedDataArrayOfDictionaries; //dictionary entries are currently in nsstring format
SearchResultList *searchResultList = [[SearchResultList alloc]init];
NSMutableArray *testArray = [[NSMutableArray alloc] init];

int myCount = 0;

while (myCount <= [filteredArray count]) {
    //call class and pass current NSDictionary in array[myCount]
    [searchResultList assignSearchData:filteredArray[myCount]];
    searchResultList = (SearchResultList*)[testingDic objectForKey:@"myObject"];
    testArray[myCount] = searchResultList; //create array of nsobjectclassed, this is also where the app fails
    NSLog(@"%@", testArray[myCount]);
}

希望这是有道理的,我在 while 语句的中间有点迷失了......我知道我需要取回 NSObject 类然后将它分配给一个数组......但我只是不确定如何做到这一点,任何帮助将不胜感激。

【问题讨论】:

  • 您的代码没有意义。 seriesSearchResultList 来自哪里?为什么要创建一个 SearchResultList 对象并将其分配给 searchResultList,然后再覆盖该指针(并泄漏该对象)? testingDic 中应该包含什么?
  • 哎呀。 seriesSearchresultList 被替换为 searcResultList .. 不知道他们发生了什么。你的问题的第二部分的答案是:我有点迷路了..我以为我正在将 NSObject 类接收到 searchResultList 然后将该对象放入数组中..这就是我认为正在发生的事情..但我想它不是..我有点迷路了..我试图找到一个与我正在做的事情等效的例子,但我找不到。
  • 我建议您先学习如何使用 Java 进行编程。用 Objective-C 学习编程是一个非常糟糕的主意。

标签: objective-c ios cocoa-touch nsarray


【解决方案1】:

您超出了数组的大小filteredArray

while (myCount <= [filteredArray count]) {

应该阅读

while (myCount <[filteredArray count]) {

因为数组的计数比最后一个对象的索引大一,因为索引从 0 开始。

老实说,我不确定您要达到的目标,但您应该考虑使用 fast enumeration 而不是 while 语句

for (id obj in filteredArray) {

甚至更高级的block-based enumeration

NSMutableArray *testArray = [[NSMutableArray alloc] init];
[filteredArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    //...
    [testArray addObject:obj];
}];

【讨论】:

  • 好的,感谢您的回复,我现在要阅读快速枚举。我想要实现的是获取一个充满 NSDictionary 的 NSMutableArray 条目都是字符串并将它们传递给一个 NSObject 类,该类接受字典中的每个条目并将 NSString 转换为它们的真实类型,并为每个 NSDictionary 对象执行此操作MutableArray,然后传递每个正在创建的 NSObject 类,并将值设置到它们自己的 NSMutable 数组中,然后该数组可用于对类中的不同条目进行排序。我希望这是有道理的。
  • 这确实有效.. 但是我必须更改从 searchResultList 调用的方法返回类型以返回 self。然后我还在testArray addobject:obj]; 之后拿走了[count] 这似乎让事情进展顺利,这是一个很好的解脱.. 但是我仍然需要做一些测试。以确保没有随机错误弹出。感谢您的帮助:)
【解决方案2】:

尝试使用NSMutableArray addObject。 NSMutableArray 没有“C”风格的 [] 运算符。

【讨论】:

  • Modern Objective-C 和 Xcode 4.4 及更高版本中的 LLVM4 编译器并非如此。支持对象文字和下标
  • hrmmm 这是导致此问题的原因由于未捕获的异常“NSRangeException”而终止应用程序,原因:“ -[__NSArrayM objectAtIndex:]: index 0超出空数组的界限'*
  • @Abizem - 感谢您让我知道这一点。它会节省相当多的打字时间。
  • @HurkNburkS 确保不要访问超出范围的元素。如果您只添加一项但尝试访问 objectAtIndex:2 则会出现异常。
  • 试试[testArray addObject:seriesSearchResultList]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-15
  • 2011-01-02
  • 1970-01-01
  • 2020-11-19
相关资源
最近更新 更多