使用Global时NSMuteablearray为null

时间:2011-03-09 13:26:08

标签: iphone objective-c cocoa-touch

我已经设置了一个基本应用程序,它可以下拉JSON流并在两个视图控制器中显示信息。我主要使用基于根控制器的存储阵列,虽然工作不是最佳实践。我决定将数据模型移动到一个单独的类中,然后在app delegate中分配(我可以使用单例,但应用程序是基本的,我只是在学习)。

所以国家级是

@interface Country : NSObject {

NSString *countryName;
NSString *countryDetail;
NSMutableArray *countryList;
UIImage *countryFlag;

}

@property (nonatomic, retain) NSString *countryName;
@property (nonatomic, retain) NSString *countryDetail;
@property (nonatomic, retain) UIImage *countryFlag;
@property (nonatomic, retain) NSMutableArray *countryList;

并且每个属性都在.m

中合成

在appdelegate .h

@class RootController;
@class Country;

@interface FO_InfoAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
UINavigationController *navController;
RootController *viewController;
Country *myCountry;
} 

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet RootController *viewController;
@property (nonatomic, retain) IBOutlet UINavigationController *navController;
@property (nonatomic,retain) Country *myCountry;

然后在.m

#import "Country.h"

@synthesize myCountry;

myCountry = [[Country alloc] init];

然后使用#define

在所需的类中共享Global
  #define FOAppDelegate ((FO_InfoAppDelegate *)[[UIApplication sharedApplication] delegate])

我有两个解析类来处理两个不同的url json提要。相同来源的不同数据。

我的原始配置我在parseclass.h中有一个从rootcontroller调用的方法。

- (void)querycountrieslistwithViewCont:(UIViewController *)controller;

然后在实现中我做了一些JSON的解析并将数据传递给最初在根控制器中声明和分配的NSmuteablearray 这就是它的工作方式。结果数组输入UITableview

NSArray *countries = [jparser objectWithString:fco_content error:&error];
for (NSDictionary *country in countries) {
 [viewController.countryName addObject:[country valueForKeyPath:@"country.slug"]]

现在在我使用datamodel的新设计中,我希望parse类将信息存储在country类中,所以我将最后一行更改为:

[FOAppDelegate.myCountry.countryList addObject:[country valueForKeyPath:@"country.slug"]];

这导致数组被列为null!?它们都是NSMuteablearray,只是从不同的地方访问过。我有点困惑!

1 个答案:

答案 0 :(得分:0)

记录日志,找出失败时出现的问题。

就在这一行之前:

[FOAppDelegate.myCountry.countryList addObject:[country valueForKeyPath:@"country.slug"]];

插入此内容:

NSLog(@" FOAppDelegate.myCountry = %@", FOAppDelegate.myCountry);
NSLog(@" FOAppDelegate.myCountry.countryList = %@", FOAppDelegate.myCountry.countryList);
NSLog(@" country = %@", country);
NSLog(@" country's valueForKeyPath = %@", [country valueForKeyPath:@"country.slug"]);

然后运行它,检查控制台,并查找不应该为零的内容。

你的问题可能只是你没有分配并初始化你的countryList NSMutableArray。