2011-12-01 175 views
2

我正在使用故事板在iOs 5中創建一個應用程序,並且在該應用程序中,我需要爲表視圖使用一個NSMutableArray。 所以我創建該數組,如下所示。 但在iOS 4的我們在創建陣列狀iOs 5中的NSMutable Array

@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中它會告訴我的錯誤(「預期標識符或{」 )on

MySpots = [[NSMutableArray alloc]init]; 

因爲在iOs 5中不需要發佈。所以我應該如何在iOs 5中聲明NSMutableArray。 在此先感謝:)

回答

2

這與iOS 5沒有任何關係,而是來自目標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

+0

雅,其工作我改變了財產的名稱,它會工作,感謝TriPhoenix –

0

確切的代碼永遠無法編譯,更不用說正常工作!

首先:你在循環中使用的局部變量mySpot是從哪裏來的?

其次,我非常積極地確保您不能名稱的變量相同的類型:MySpots既是類和同一類的伊娃? 如果這個聲明在一些奇怪的編譯器上工作,我會考慮編譯器中的一個錯誤。即使如果聲明編譯 - 這是一個非常多的ifs,已經 - 您使用該變量的行不能工作,因爲編譯器無法知道您的意思是類型MySpots或實例變量 - 奇怪的事情編譯到目前爲止可能在這裏做一些事情,但我不會相信這樣的「編譯器」的代碼輸出的有效性。

這就是你的錯誤信息來自何處。

相關問題