【问题标题】:static variables - another keyword i can use for instance variable?静态变量 - 我可以使用的另一个关键字作为实例变量?
【发布时间】:2012-01-28 23:50:51
【问题描述】:

我正在使用一个应用程序,它使用 XML 和 NSXMLParser 获取苹果实时提要的 RSS 提要。我将其分类,以便与 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 提要帖子的标题字符串。现在我必须在实现中使 arr 成为一个静态变量,否则它总是会变成一个空数组。现在它将数组记录为 8。这是声明。

  @implementation RSSItem
  static NSMutableArray *arr;

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

【问题讨论】:

  • @user1172792:您的标题提到了“静态”和“实例变量”——这是一个矛盾。到目前为止发布的一个答案解释了如何管理实例变量并使其他类可用。你真的想要一个“静态”——一个由你的类的所有实例共享的数组——还是“实例”——你的类的每个实例一个数组?答案因需要而异...

标签: objective-c xcode uitableview static rss


【解决方案1】:

声明为静态就像拥有一个类变量一样。假设我正确理解您的问题,您有一个由一个类创建的数组,您想将其传递给另一个类?

在你的 RSSItem 类中我会有一个属性

@property (retain) NSMutableArray *array;

那么你当然需要合成它

@synthesize array = _array;

在你的 RSSItem 类的 init 方法中:

- (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];
}

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

希望这对您有所帮助。如果您发现不清楚或需要任何进一步的帮助,请随时告诉我:)

【讨论】:

  • 我收到一个 EXC_BAD_ACCESS:当前语言:自动;目前objective-c在杀死目标时杀死错误(无论如何都要杀死):警告:函数“void macosx_kill_inferior_safe”中“/SourceCache/gdb/gdb-1708/src/gdb/macosx/macosx-nat-i​​nferior.c”的第2184行出错()": (os/kern) failure (0x5x) quit 程序以退出代码结束:0
  • 你在哪里得到这个错误?当您尝试创建数组时?当你将它传递给其他控制器时,或者当其他控制器尝试使用它时?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-28
  • 1970-01-01
  • 1970-01-01
  • 2018-03-15
相关资源
最近更新 更多