静态变量 - 我可以用于实例变量的另一个关键字?

时间:2012-01-28 15:18:20

标签: objective-c xcode uitableview static rss

我正在使用一个应用程序,该应用程序使用XML和NSXMLParser获取apple live feed的RSS Feed。我将它分类为类别,以便与Steve Jobs相关的所有内容(我使用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 Feed帖子的标题字符串。现在我必须在实现中使arr成为一个静态变量,否则它总是变成一个空数组。现在它将数组记录为8.这是声明。

  @implementation RSSItem
  static NSMutableArray *arr;

所以现在我需要将该数组分发给名为Finance的TableViewController类,但每当我尝试它时总是空的。然后我尝试为TableViewController创建一个模型,它是RSSItem的子类。我需要在这个新类中访问该静态变量。我可以创建静态属性或变量吗?如果我不能这样做,你可以为我提供一种分发这个阵列的方法,而不是让它变得空洞。我实际上不确定它为什么变空。如果你知道原因,请告诉我,并回答我的上述问题。谢谢!

1 个答案:

答案 0 :(得分:1)

声明为静态最像是有一个类变量。假设我正确理解了你的问题,你有一个你想要传递给另一个类的类创建的数组吗?

在你的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

最后,您需要确保在RSSItem类中覆盖dealloc:

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

这应该允许您在表控制器中获取数组。然后你可以随心所欲地做它。

希望这对你有所帮助。如果您发现不清楚或需要任何进一步的帮助,请不要犹豫,让我知道:)