NSMutable Array в iOs 5 - PullRequest
       3

NSMutable Array в iOs 5

2 голосов
/ 01 декабря 2011

Я создаю одно приложение в iOs 5, используя раскадровку, и в этом приложении мне нужно использовать один 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 не нужно выпускать.так как я должен объявить NSMutableArray в iOs 5.заранее спасибо:)

Ответы [ 2 ]

2 голосов
/ 01 декабря 2011

Это не имеет ничего общего с 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 просто вставляет соответствующий retainи releases за кадром.

0 голосов
/ 01 декабря 2011

Этот точный код никогда не может быть скомпилирован, не говоря уже о том, чтобы он работал правильно!

Прежде всего: откуда берется локальная переменная mySpot, которую вы используете в цикле?

Во-вторых, я в значительной степени уверен, что вы не можете назвать переменную , идентичную типу: MySpots является и классом, и иваром того же класса?Если бы это объявление работало на каком-то странном компиляторе, я бы посчитал это ошибкой в ​​компиляторе.И даже , если это объявление скомпилировано - это уже очень много ifs - строка, где вы используете эту переменную , не может работать, потому что компилятор не может знать, имели ли вы в виду тип MySpots или переменная экземпляра - странная вещь, скомпилированная до сих пор , может сделать что-то здесь, но я бы не поверил в достоверность вывода кода такого "компилятора".

И вот откуда приходит ваше сообщение об ошибке.

...