【问题标题】:Error When adding Object to NSMutableArray将对象添加到 NSMutableArray 时出错
【发布时间】:2010-07-26 22:02:43
【问题描述】:

尝试将项目添加到封装在对象中的 NSMutableArray 时出现错误。

代码如下:

#import <Foundation/Foundation.h>


@interface TestObject : NSObject {
    NSMutableArray *myArray;
}

@property (nonatomic, retain) NSMutableArray *myArray;


@end

#import "TestObject.h"


@implementation TestObject

@synthesize myArray;

- (id) init {
    if(self= [super init]){
        // Initialise the Mutable Array
        myArray = [[NSMutableArray alloc] init];
    }
    return self;
}

- (void) dealloc {
    [super dealloc];
    [myArray release];
}
@end

调用:

TestObject *testObject = [[TestObject alloc] init];
    NSString *someString = @"blah blah blah";
    NSLog(@"%@", someString);
    [testObject.myArray addObject:someString];
    NSLog(@"Test Object Array Count: %@", [testObject.myArray count]);
    [testObject release];

谁能告诉我为什么在调用 count 时会抛出错误?

我也尝试将可变数组复制到局部变量,并在对局部变量调用 count 时得到相同的结果。

【问题讨论】:

  • 修复了我自己的问题。 NSLog(@"Test Object Array Count: %d", [testObject.myArray count]);
  • 不想回答您的问题,但我强烈建议您将 -dealloc 中的 [myArray release] 调用移至执行超级调用之前。
  • 谢谢本杰明,我的疏忽不大。我在 Safari 中手动输入了该代码,因为这台机器上没有 xcode。

标签: iphone objective-c nsmutablearray


【解决方案1】:

警告警告警告!!!

[super dealloc] 是您在-dealloc 方法中应该做的最后件事,不是第一个!

【讨论】:

    【解决方案2】:

    它只是显示警告是一件好事,当我这样做时它已经崩溃了。

    原因是 %@ 是一个对象占位符。但是 count 方法返回 NSInteger 这是一个原始数据类型,它的占位符是 %d,正如您在评论中正确指出的那样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      • 2011-08-22
      相关资源
      最近更新 更多