我从iOS编程中略微休息了几个版本,现在我感觉有点生疏了。我想做的很简单。我的应用程序的一个部分中加载了一些Json数据,这些数据似乎在另一部分中不可用。我无法弄明白如何让它发挥作用。
第1节
- (void)addSpringBroadIcon
{
primeView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
primeShadowView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
[primeShadowView setBackgroundColor:[UIColor whiteColor]];
[self.view addSubview:primeShadowView];
[primeShadowView setHidden:YES];
SESpringBoard *board2 = [SESpringBoard initWithTitle:@"Welcome" items:items launcherImage:[UIImage imageNamed:@"navbtn_home.png"]];
[primeView addSubview:board2];
[self.view addSubview:primeView];
第2节
- (void)fetchedData:(NSData *)responseData
{
NSMutableArray *items = [NSMutableArray array];
for (NSDictionary *dict in pJson) {
[items addObject:[SEMenuItem initWithTitle:[dict objectForKey:@"name"] imageName:@"vitamin_d.jpg" viewController:self removable:NO]];
}
}
更新
第2节(修订)
- (void)fetchedData:(NSData *)responseData
{
if(responsePlaceData)
{
NSString *json = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
NSString *aesResponse = [AES256Util decWithString:json key:aeskey];
//NSLog(@"AES:%@",aesResponse);
NSData* jsonResponse = [aesResponse dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary* placeJson = [NSJSONSerialization JSONObjectWithData:jsonResponse options:kNilOptions error:nil];
page = [[placeJson objectForKey:@"page"] intValue];
NSLog(@"%d",page);
if (page > 0) {
NSDictionary* pJson = [placeJson objectForKey:@"data"];
self.items = [NSMutableArray array];
for (NSDictionary *dict in pJson) {
[self.items addObject:[SEMenuItem initWithTitle:[dict objectForKey:@"name"] imageName:[dict objectForKey:@"image"] viewController:self removable:NO]];
}
更新:我的想法是第2部分中self.items的数据应该可以在第1部分中解密。
基本上我只想在" fetchedData"中制作*项目。可用于" addSpringBoardIcon"中的* board2部分。我试着颠倒这些部分的顺序,但显然这没有用。也许更改viewController目标?我不知道。
我还尝试了各种方法来获取数据以加载IN addSpringBoardIcon ......这些都不起作用。我可以在fetchedData部分中加载所有数据(包括使项目与* board2一起使用),但这会弄乱视图。
任何想法(或者如果你需要我清理任何东西,因为我解释它的方式有点混乱)将不胜感激。
答案 0 :(得分:0)
根据您在评论中所说的内容进行回答 - 听起来您只是在这里使用一个View Controller。您的items Array是一个局部变量,这意味着它仅在fetchedData:方法的范围内可用。
你需要有一个作用于整个类的变量 - 即一个实例变量。在Objective-C中执行此操作的最佳方法是使用property。
您如何创建该属性呢?可能是这样,位于实现文件的顶部。
@interface MyViewController()
@property NSMutableArray *items;
@end
@implementation MyViewController
// the rest of your code...
然后,当你想稍后在代码中访问它时,你可以使用self来实现它。
- (void)fetchedData:(NSData *)responseData
{
self.items = [NSMutableArray array];