在视图控制器之间传递数组?
我真的需要更多的帮助!
我想从一个视图控制器传递数组到另一个。 我认为后者是一个“孩子”视图控制器?
我的代码如下:
MainViewController.h:
#import <UIKit/UIKit.h> #import <AudioToolbox/AudioToolbox.h> #import <AVFoundation/AVFoundation.h> @interface HelloWorldIOS4ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate, AVAudioPlayerDelegate> { NSMutableArray *countProductCode; UIPopoverController *detailViewPopover; } @property (nonatomic, retain) NSMutableArray *countProductCode; @property (nonatomic, retain) UIPopoverController *detailViewPopover; - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data; ... @end
MainViewController.m
#import "HelloWorldIOS4ViewController.h" #import "JSON.h" #import "PopoverContentViewController.h" @implementation HelloWorldIOS4ViewController @synthesize detailViewPopover; @synthesize countProductCode; - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSDictionary *results = [jsonString JSONValue]; NSLog(@"RETURN: %@", results); [countProductCode removeAllObjects]; NSArray *products = [results objectForKey:@"items"]; for (NSDictionary *row in products) { NSString *code = [row objectForKey:@"ic"]; [countProductCode addObject:code]; } PopoverContentViewController.countProductCodes = countProductCode; }
PopoverViewController.h:
@interface PopoverContentViewController : UITableViewController { NSMutableArray *countProductCodes; } @property (nonatomic, retain) NSMutableArray *countProductCodes; @end
PopoverViewController.m:
#import "PopoverContentViewController.h" #import "HelloWorldIOS4ViewController.h" @implementation PopoverContentViewController @synthesize countProductCodes; ...
我已经削减了很多,但我知道从负载的NSLog的星罗棋布,我得到的数据回来等,但我不能将数组countProductCode
传递给PopoverViewController's
countProductCodes
数组。
我不断收到
“访问未知”setCountProductCodes:“类方法”
错误。
这可能是我正在做的一件非常愚蠢的事情,但这让我疯狂!
任何人都可以帮忙吗?
谢谢詹姆斯
亲爱的詹姆斯,我想你想仔细看看模型 – 视图 – 控制器范例。 在你的应用程序中,你试图实现某种“超级”。 让我解释一下这是什么意思:
在你的MainViewController类中,这显然是一个控制器,也有模型的一部分实现。 这是一个糟糕的主意,但是一开始就很常见。 也许我误解了你的devise,但是我将如何实现它:
模型我会实现一个适当的模型对象,在你的情况下,可以像使用NSMutableArray
作为属性的自定义NSObject
子类一样简单。 此外,这个模型将有用于从互联网上检索数据的方法。 这是正确的:在模型中进行联网。 你将不得不像- (void) refreshProductCode
这样的方法,你可以从你的控制器调用。 如果你想得到真正的喜欢,使用NSOperation
来封装下载(那么你会使用NSURLConnection
的同步变体,因为操作本身已经asynchronous执行)如果你的JSONstringparsing更长,这也是在后台执行,你的用户界面将保持响应。
所以现在模型正在下载你的东西 – 很好,但我怎么知道什么时候完成? 那么一旦完成,你会从模型发布一个通知。 如果下载失败怎么办? 你猜对了:发布通知失败。
控制器需要显示模型数据的控制器首先获取模型对象。 在这种情况下,模型对象是您的AppController上的一个属性。 然后控制器拥有该模型对象的属性并保留该属性,以便模型对象在控制器处于活动状态时不会消失。 控制器然后也注册模型的通知。 那么典型的下载工作将如何呢?
- 获取模型对象的一个实例
- 在模型对象上调用
-(void) refreshProductCode
- 在状态栏中显示networking活动微调,并等待通知
- 当通知进入时,在成功刷新UI和失败时重启下载或向用户显示一条提示。 还要禁用networking活动微调器。
如何在视图控制器之间混洗数据? 视图控制器应该像黑手党一样操作:每个视图控制器都在需要知道的基础上工作。 例如,如果您希望视图控制器显示产品的详细信息,则不会将所有产品的模型传递给控制器。 相反,你将在一个只有一个产品模型对象的细节视图控制器上有一个实例variables,它具有描述文本,照片等所有信息。最酷的是如果你想再次在你的应用程序中显示产品信息,你可以重用视图控制器,因为它所需要的只是一个产品模型对象来完成它的工作。
在你的代码中:
PopoverContentViewController.countProductCodes = countProductCode;
应该:
popoverContentViewController.countProductCodes = countProductCode;
您的实例名称应该与类名称不同。
在mainViewController类中,使用以下方法
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
您正在使用类名称访问“countProductCodes”。 你应该访问使用它的对象。
喜欢
PopoverContentViewController *obj = [[PopoverContentViewController alloc] init]; obj.countProductCodes = countProductCodes;
问候,
萨蒂亚
在MainViewController.h中 :
+(NSMutableArray)arrayRes;
在MainViewController.m中
+(NSMutableArray)arrayRes{ return countProductCode; }
像通常那样对countProductCode数组执行任何代码更改
在PopoverViewController.m中声明@class MainViewController;
并在viewDidLoad
NSMutableArray *newArray; newArray = [MainViewController arrayRes];
- AVAudioSession的PlayAndRecord类和AVAudioSessionModeMeasurement与defaultToSpeaker选项不兼容?
- 初始化PayPal错误
- 如何从UISearchBarDisplayController结果inheritance到detailViewController
- 在保持速度的同时沿着X轴拖动SceneKit节点? 斯威夫特3
- 如何添加页脚到故事板中的UITableView
- 如何从iOS应用程序拨打电话号码?
- 用iOS 6 SDK和Xcode 4.5构buildarmv6架构(目标iOS 3.1.3)?
- 如何将Linphone集成到现有项目(IOS中的SIP)
- GeoFire更新在同一个电话