ios - 为什么我的属性(property)因调用地点而异?

标签 ios objective-c

所以我有一个 NSMutableArray 加载了我的 viewDidLoad 方法的对象。只是为了检查,我将 NSLog(@"%d", [self.myMutableArray count]); 放在 viewDidLoad 方法的末尾并得到 6。

当我将相同的 NSLog 放在另一个方法(如 tableView:didSelectRowAtIndexPath)上时,我得到相同的数字 6。

问题是当我从 IBAction 方法调用相同的 NSLog 时,我得到 0。为什么?

此外,我真正想做的是从另一个类访问此属性,但我发现它是空的:

HabitsTableViewController *habitsViewController = [[HabitsTableViewController alloc] initWithNibName:@"HabitsTableViewController" bundle:nil];
NSLog(@"%d",[habitsViewController.habits count]);

最佳答案

这是因为您正在创建 HabitsTableViewController 的新实例。您需要维护一个指向您想要影响的 Controller 的指针。

保留指向另一个类的指针的一种方法是将其声明为属性。如果需要将其保留在此类中,请使用“strong”,如果应由另一个类保留,请使用“weak”。

在你的.h中

@property (strong, nonatomic) HabitsTableViewController * pointerToHabitsTableViewController;

然后,在您的 .m 中,当您调用 HabitsTableViewController 时,将其分配给指针:

_pointerToHabitsTableViewController = ...;

然后,更改此:

HabitsTableViewController *habitsViewController = [[HabitsTableViewController alloc] initWithNibName:@"HabitsTableViewController" bundle:nil];
NSLog(@"%d",[habitsViewController.habits count]);

为此:

NSLog(@"%d",[_pointerToHabitsTableViewController.habits count]);

关于ios - 为什么我的属性(property)因调用地点而异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23437759/

相关文章:

iphone - 如何检测 iphone 的 VPN 连接?

ios - 制作一个停在 spritekit 中的物体上的激光

ios - 使用 URL 方案启动 Podcast 应用程序

ios - 应用商店发布后显示文件过大

ios - 在 iOS 中运行 UI 测试时如何在应用程序中命中断点?

ios - 带解析API IOS的​​JSON反序列化

ios - 如何在 iOS 上访问 Facebook Graph SDK 的 age_range 属性

ios - 短信中的好友姓名? ( objective-C )

ios - 来自 plist 文件的 NSDictionary

objective-c - 来自 NSMutableArray 的子数组