【问题标题】:Error on Adding to NSMutableArray添加到 NSMutableArray 时出错
【发布时间】:2014-03-29 04:11:17
【问题描述】:

以下代码在我的实现文件中:

NSMutableArray *courseArray;


- (IBAction)btnClick:(id)sender
{
    NSDictionary *courseNames;
    if(![_txtBox.text isEqual:@""]) //if not empty
    {
        courseNames = [self retrieveCourseNamesForSemester:_txtBox.text];
        for (NSString *key in courseNames)
        {
            NSString *val = [NSString stringWithFormat:@"%@-%@",key,[courseNames objectForKey:key]];
            _txtView.text = val;
            @try
            {
                [courseArray addObject:val];
            }
            @catch(NSException *e)
            {
                NSLog(@"Exception: %@ for value = %@", e, val);
            }
        }
    }
    [_coursePicker reloadAllComponents];
    _coursePicker.hidden=false;
    [_txtBox resignFirstResponder];
}

在您看到对NSLog() 的调用时,我收到以下错误消息:

2014-03-29 00:02:25.830 WebServiceTest[44646:60b] Exception: -[__NSArrayI addObject:]: unrecognized selector sent to instance 0x8d82c30 for value = 73-522-Course Name

编辑:另外,courseArray 填充了viewDidLoad 中的示例数据:

- (void)viewDidLoad
{
    [super viewDidLoad];
    courseArray = @[@"Australia (AUD)", @"China (CNY)",
                    @"France (EUR)", @"Great Britain (GBP)", @"Japan (JPY)"];
}

我应该在某个地方定义courseArray 将采用NSString 对象吗?

【问题讨论】:

  • courseArray 是一个不可变数组。您的代码在哪里实际为 courseArray 变量赋值?
  • courseArray 在代码的第一行被定义为NSMutableArray。它是如何不可变的? courseArray 填充有 viewDidLoad 中的示例数据,现在添加到问题中。
  • @rar 声明无关。您正在为变量分配一个不可变数组。它不会因为你声明变量的方式而神奇地变得可变。
  • 我现在明白了。为其分配国家/地区值使其成为不可变数组。
  • 仅供参考 - 在查看您遇到的错误时,这里有一个提示。当您看到__NSArrayI - 这是不可变数组的内部表示(因此是I)。如果错误与实际的可变数组有关,您可能会看到 __NSArrayM。

标签: ios objective-c nsmutablearray nsarray


【解决方案1】:

viewDidLoad 中的代码创建了一个不可变数组。你需要制作一个可变副本,像这样

(void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    courseArray = [@[@"(AUD)", @"(CNY)", @"(EUR)"] mutableCopy];
}

【讨论】:

  • 因为我实际上并不需要这些值,所以我只是使用courseArray = [[NSMutableArray alloc] init]; 来正确声明我想要的数组。
【解决方案2】:

试试这个代码,

for (NSString *key in courseNames)
{
    NSString *val = [NSString stringWithFormat:@"%@-%@",key,[courseNames objectForKey:key]];
            _txtView.text = val;


    if ([CourseArray count]==0)
    {
        CourseArray= [NSMutableArray arrayWithObject:val];
    }
    else
    {
        [CourseArray addObject:val];
    }
}

【讨论】:

  • 抛出同样的异常:2014-03-29 00:23:18.823 WebServiceTest[44834:60b] -[__NSArrayI addObject:]: unrecognized selector sent to instance 0xde41590
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
相关资源
最近更新 更多