【问题标题】:Unable to manage single elements in an NSMutableArray无法管理 NSMutableArray 中的单个元素
【发布时间】:2013-12-19 02:40:27
【问题描述】:

所以我将一个类对象插入到 NSMutable 数组中,然后我尝试管理每个索引对象的特定属性。

在这里我创建了 NsMutableArray:

    self.currentPuzzle = [[NSMutableArray alloc]init];

for(int i = 0; i < [temp length]; i++){     //temp is a string containing #'s and dots.

    AnswerSpecifier *objectToGetIntoArray = [[AnswerSpecifier alloc]init];
    objectToGetIntoArray.value = [[temp substringWithRange:NSMakeRange(i, 1)] intValue];

    [self.currentPuzzle addObject:objectToGetIntoArray];
}

在这里我试图更改每个对象的 value 属性。 value 是一个 int 属性。

for (int i = 0; i < [self.board.boardString length]; i++) {
    [self.currentPuzzle objectAtIndex:i].value = [[self.board.boardString substringWithRange:NSMakeRange(i, 1)] intValue];

}

但是我收到一条错误消息,指出在 id 类型的对象上找不到属性值。我应该创建一个新数组并将其分配给旧数组吗?有没有更好的方法来做到这一点?

【问题讨论】:

    标签: ios objective-c cocoa-touch


    【解决方案1】:

    拆分您的代码。这样更易于阅读和调试。

    for (int i = 0; i < [self.board.boardString length]; i++) {
        AnswerSpecifier *answer = self.currentPuzzle[i];
        NSString *boardString = [self.board.boardString substringWithRange:NSMakeRange(i, 1)];
        int value = [boardString intValue];
        answer.value = value;
    }
    

    将尽可能多的代码塞进一行是不会得分的。

    但是,如果您真的只想修复一行,则需要将演员表放在正确的位置:

    [(AnswerSpecifier *)self.currentPuzzle[i] setValue:[[self.board.boardString substringWithRange:NSMakeRange(i, 1)] intValue]];
    

    【讨论】:

    • 拆分代码清除了很多东西。作为对单行版本的好奇,如果我从未声明过 setValue 方法,为什么它会起作用?那是我的属性值的设置器吗?
    • 是的,setValue: 是属性的设置者。 answer.value = xxx[answer setValue:xxx] 是完全相同的代码。
    【解决方案2】:

    尝试类型转换对象

    ((AnswerSpecifier *)[self.currentPuzzle objectAtIndex:i]).value = [[self.board.boardString substringWithRange:NSMakeRange(i, 1)] intValue];
    

    【讨论】:

      【解决方案3】:

      尝试替换为:

      for (int i = 0; i < [self.board.boardString length]; i++) {
          [[self.currentPuzzle objectAtIndex:i] setValue:[[self.board.boardString substringWithRange:NSMakeRange(i, 1)] intValue]];
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-27
        • 1970-01-01
        • 2011-04-19
        • 1970-01-01
        相关资源
        最近更新 更多