iOs中的NSMutableArray 5

时间:2011-12-01 07:35:56

标签: ios5 nsmutablearray

我正在使用故事板在iOs 5中创建一个应用程序,在该应用程序中,我需要为表View使用一个NSMutableArray。 所以我正在创建该数组,如下所示。 但是在iOs 4中我们创建了像

这样的数组
@interface MySpots : UITableViewController{
       NSMutableArray *MySpots;
}
@property (nonatomic, strong) NSMutableArray *MySpots;

和.m文件

@synthesize MySpots;
- (void)viewDidLoad

{
     [super viewDidLoad];
      MySpots = [[NSMutableArray alloc]init];
      for (int i = 0; i<10; i++) {
          mySpot.SpotName = @"Name Of Spot";
          mySpot.SpotTime = @"15mi";
          mySpot.SpotDis = @"Short preview of the description will appear in this section.Acts as a reminder for relevant";
          [MySpots addObject:mySpot];
       }

}

但是当我尝试在iOs 5中执行此操作时,它会显示错误(“预期标识符或{”)

MySpots = [[NSMutableArray alloc]init];

因为在iOs 5中无需发布。那么我该如何在iOs 5中声明NSMutableArray。 提前谢谢:)

2 个答案:

答案 0 :(得分:2)

这与iOS 5无关,而是来自目标C的编译器错误。基本问题是您使用MySpots作为接口名称和属性/实例变量。遇到你的行

MySpots = [[NSMutableArray alloc]init];

编译器现在不确定这是变量MySpots还是应该是MySpots类型变量的声明,例如

MySpots *mySecondController = ...;

由于缺少变量名,编译器会假定第二个并退出。

你应该

  1. 将该属性的名称更改为与类名不同的名称以避免混淆
  2. 使用self.property =代替property =,因为这会使用正确的内存管理。 ARC在某种程度上减少了这个问题,但无论如何使用属性提供的自动保留/释放都是好的做法。
  3. 其中任何一个都有帮助(在情况1中,编译器现在明确要做什么,如果2 self.MySpots将是一个唯一的名称并且不能与类名混淆)但我会一定要两者兼顾,重命名属性(或类)并使用self.property =

    PS:即使使用ARC,您仍然可以像往常一样使用[[NSMutableArray alloc] init] ARC进行初始化,只需在幕后插入相应的retainreleases

答案 1 :(得分:0)

确切的代码永远不会编译,更不用说正常了!

首先:你在循环中使用的局部变量mySpot首先来自哪里?

其次,我非常肯定你不能将变量相同命名为类型:MySpots既是类又是ivar同班? 如果该声明适用于某些奇怪的编译器,我会考虑编译器中的错误。甚至 if 那个声明编译 - 那已经是很多ifs - 你使用该变量的行不能工作,因为编译器无法知道你是否认为这个类型MySpots或实例变量 - 到目前为止编译的奇怪的东西可能在这里做了一些事情,但我不会相信这种“编译器”的代码输出的有效性。< / p>

这就是您的错误消息来源。