作者Fantasywind (Fantasywind)
看板MacDev
标题[问题] NSObject property NSMutableArray 传值
时间Thu Aug 9 20:24:48 2012
哈罗大家好,近来开始自学Objective-C on iOS Programming
参考书籍是 Learning iOS Programming 2nd / O'Reilly
目前尝是撰写一个读取并分析RSS/xml的功能,参照书中作法建议一独立Class (NSObject)
专责网路连线(NSURLConnection)与分析作业(libxml)
我在SPNewsGather中宣告四个 NSMutableArray 作为分析後资料储存之用:
并建立一个沟通用的Method
@property (weak, nonatomic) NSArray *titles;
@property (weak, nonatomic) NSMutableArray *links;
@property (weak, nonatomic) NSMutableArray *descriptions;
@property (weak, nonatomic) NSMutableArray *images;
- (void)rssGetter:(UIViewController *)controller;
而我的主体ViewController是tabbed table view
我先在SPAppDelegate 将SPNewsGather alloc/init 并 bind on viewControll:
UIViewController *viewController1 = [[SPFirstViewController alloc] initWithNibName:@"SPFirstViewController" bundle:nil];
SPSecondViewController *viewController2 = [[SPSecondViewController alloc] initWithNibName:@"SPSecondViewController" bundle:nil];
UIViewController *viewController3 = [[SPThirdViewController alloc] initWithNibName:@"SPThirdViewController" bundle:nil];
UIViewController *viewController4 = [[SPFourthViewController alloc] initWithNibName:@"SPFourthViewController" bundle:nil];
UIViewController *viewController5 = [[SPFifthViewController alloc] initWithNibName:@"SPFifthViewController" bundle:nil];
SPNewsGather *newsGather = [[SPNewsGather alloc] init];
viewController2.newsGather = newsGather;
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = @[viewController1, viewController2, viewController3, viewController4, viewController5];
self.window.rootViewController = self.tabBarController;
於SPSecondViewController 中也有 import & property:
#import "SPNewsGather.h"
@property (strong, nonatomic) SPNewsGather *newsGather;
在其implement也可以正确抓到 self.newsGather (type: SPNewsGather Object)
也可以正确执行Method:
[self.newsGather rssGetter:self];
在落落长的前提下,问题来了
在不断插入中断点,我确定rssGather:有执行,其中所有的NSMutableArray也都可以
在SPNewsGather中看到值,最後也透过
[viewController.tableView reloadData];
来确保不会遇到不同资料问题,但是不管在reloadData之前或之後
SPSecondViewController中使用NSLog查看 self.newsGather.titles 的值都是(null)
本来我以为是连结上有问题,我有另外以同样方法宣告一个
NSString *testString;
然後在SPnewsGather中改变他的值
然後我在SPSecondViewController 中 self.newsGather.testString
就可以看到正确的改变,也就是说只有NSMutableArray无法正确传值
昨天测这个整夜没睡,希望有高手可以帮个忙QQ
完整的程式码可以在Github看到
https://github.com/fantasywind/Shockpaper
谢谢你花了时间看这篇落落长的问题 :)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.45.22.35
1F:→ kiii210:build不起来..囧 08/09 20:50
2F:推 offname:有什麽特别的原因要用 weak 吗? 08/09 20:55
3F:→ Fantasywind:书上的Parser例子只有用weak我就没有特别想过 @@ 08/09 21:04
4F:→ Fantasywind:真的是这个问题!! 改成strong全部都正常了.. 08/09 21:06
5F:→ Fantasywind:来研究一下这部分 感谢offname大 !! 08/09 21:06
6F:→ Fantasywind:对ARC的运作实在不是很懂 08/09 21:08
7F:→ darktt:其实对ARC还不懂的话可以先关闭它,使用旧方法来解决即可 08/09 22:00