статические переменные - другое ключевое слово, которое я могу использовать для переменной экземпляра? - PullRequest
0 голосов
/ 28 января 2012

Я использую приложение, которое принимает RSS-канал Apple Live Feed с использованием XML и NSXMLParser.Я сортирую его по категориям, так что все, что связано со Стивом Джобсом (я сортирую его, используя NSRange для строк), будет отображаться в этой категории.Вы выбираете категорию, используя UIPickerView.У меня есть метод, который вызывается всякий раз, когда найдена финансовая категория.Это класс RSSItem:

   if (revenue.location != NSNotFound || earnings.location != NSNotFound || quarter.location != NSNotFound) {
//  categoryKey = @"Finance";
if (currentString) {
    [arr addObject:currentString];
    NSLog(@"%i" , [arr count]);
}
 }

currentString - строка, которая является заголовком статьи / RSS-ленты.Теперь я должен был сделать arr статической переменной в реализации, иначе он всегда получился бы как пустой массив.Теперь он записывает массив в счетчик 8. Вот объявление.

  @implementation RSSItem
  static NSMutableArray *arr;

Так что теперь мне нужно распределить этот массив по классу TableViewController с именем Finance, но всякий раз, когда я пытаюсь это сделать, он всегда оказывается пустым.Затем я попытался создать модель для TableViewController, который является подклассом RSSItem.Мне нужно получить доступ к этой статической переменной в этом новом классе.Могу ли я создать статическое свойство или переменную.Если я не могу этого сделать, можете ли вы предоставить мне подход к распространению этого массива, а НЕ ПОЗВОЛЯТЬ, ЧТОБЫ СТАТЬ ПУСТЫМИ.Я на самом деле не уверен, почему он становится пустым.Если вы знаете, почему, пожалуйста, сообщите мне и, пожалуйста, ответьте на мои вопросы.Спасибо!

1 Ответ

1 голос
/ 28 января 2012

Объявление в качестве статики больше всего похоже на наличие переменной класса.Если я правильно понимаю вашу проблему, у вас есть массив, созданный одним классом, который вы хотите передать другому классу?

В вашем классе RSSItem у меня будет свойство

@property (retain) NSMutableArray *array;

Тогда, конечно,вам нужно будет его синтезировать

@synthesize array = _array;

В вашем методе init для вашего класса RSSItem:

- (id)init {
    self = [super init];
    if (self) {
        self.array = [NSMutableArray array];
    }
}

Это даст вам пустой NSMutableArray для работы с

Тогдавместо вашей строки

[arr addObject:currentString];

используйте:

[self.array addObject:currentString];

в контроллере таблицы, вы, вероятно, имеете доступ к вашему экземпляру объекта RSSItem, поэтому вы сможете получить доступ к его массиву с помощьюделать:

NSArray *arrayInTableController = (NSArray *)myRSSItem.array

И, наконец, вам нужно убедиться, что вы переопределяете dealloc в своем классе RSSItem:

- (void)dealloc {
    self.array = nil;
    [super dealloc];
}

Это должно позволить вам получить массив в контроллере таблицы.,Затем вы можете делать с ним все, что вам нравится.

Надеюсь, это вам чем-то помогло.Если вам это неясно или вам нужна дополнительная помощь, пожалуйста, не стесняйтесь, дайте мне знать:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...