NSMutable Array in iOs 5



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

这样的数组
@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中这样做时,它会在

上显示错误("Expected identifier or {")
MySpots = [[NSMutableArray alloc]init];

因为在ios5中不需要发布。我应该如何在ios5中声明NSMutableArray。提前感谢:)

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

MySpots = [[NSMutableArray alloc]init];

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

MySpots *mySecondController = ...;

编译器假定是第二个变量,因为缺少变量名而退出。

你应该

  1. 将该属性的名称更改为与类名称不同的名称,以避免混淆
  2. 使用self.property =而不是property =,因为这使用正确的内存管理。ARC在某种程度上减少了这个问题,但使用属性提供的自动保留/释放是一个很好的实践。

其中任何一个都有帮助(在情况1中编译器现在清楚该怎么做,在情况2中self.MySpots将是一个唯一的名称,不能与类名混淆),但我肯定会两者兼得,重命名属性(或类)并使用self.property =

PS:即使使用ARC,您仍然可以通过使用[[NSMutableArray alloc] init]初始化,ARC只是在幕后插入适当的retainreleases

这段代码永远不可能被编译,更不用说正常工作了!

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

第二,我非常肯定你不能命名一个变量相同的类型:MySpots既是一个类又是同一个类的ivar ?如果该声明在某些奇怪的编译器上有效,我会认为这是编译器中的错误。甚至如果这个声明被编译了——这已经有很多if了——你使用变量的那行不能工作,因为编译器不知道你指的是MySpots类型还是实例变量——到目前为止编译的奇怪的东西可能在这里做了一些事情,但我不会相信这样一个"编译器"的代码输出的有效性。

这就是错误信息的来源

最新更新