我正在使用故事板在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。 提前谢谢:)
答案 0 :(得分:2)
这与iOS 5无关,而是来自目标C的编译器错误。基本问题是您使用MySpots
作为接口名称和属性/实例变量。遇到你的行
MySpots = [[NSMutableArray alloc]init];
编译器现在不确定这是变量MySpots
还是应该是MySpots
类型变量的声明,例如
MySpots *mySecondController = ...;
由于缺少变量名,编译器会假定第二个并退出。
你应该
self.property =
代替property =
,因为这会使用正确的内存管理。 ARC在某种程度上减少了这个问题,但无论如何使用属性提供的自动保留/释放都是好的做法。 其中任何一个都有帮助(在情况1中,编译器现在明确要做什么,如果2 self.MySpots
将是一个唯一的名称并且不能与类名混淆)但我会一定要两者兼顾,重命名属性(或类)并使用self.property =
。
PS:即使使用ARC,您仍然可以像往常一样使用[[NSMutableArray alloc] init]
ARC进行初始化,只需在幕后插入相应的retain
和releases
。
答案 1 :(得分:0)
确切的代码永远不会编译,更不用说正常了!
首先:你在循环中使用的局部变量mySpot
首先来自哪里?
其次,我非常肯定你不能将变量相同命名为类型:MySpots
既是类又是ivar同班?
如果该声明适用于某些奇怪的编译器,我会考虑编译器中的错误。甚至 if 那个声明编译 - 那已经是很多ifs - 你使用该变量的行不能工作,因为编译器无法知道你是否认为这个类型MySpots
或实例变量 - 到目前为止编译的奇怪的东西可能在这里做了一些事情,但我不会相信这种“编译器”的代码输出的有效性。< / p>
这就是您的错误消息来源。