Jam*_*and 0 iphone nsarray viewcontroller ipad ios
我真的需要一些帮助!
我试图将数组从一个视图控制器传递到另一个视图控制器.我认为后者是一个"孩子"视图控制器?
我的代码如下:
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
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
PopoverViewController.h:
@interface PopoverContentViewController : UITableViewController {
NSMutableArray *countProductCodes;
}
@property (nonatomic, retain) NSMutableArray *countProductCodes;
@end
Run Code Online (Sandbox Code Playgroud)
PopoverViewController.m:
#import "PopoverContentViewController.h"
#import "HelloWorldIOS4ViewController.h"
@implementation PopoverContentViewController
@synthesize countProductCodes;
...
Run Code Online (Sandbox Code Playgroud)
我已经削减了很多,但我知道从一堆NSLog的点缀,我得到了数据等,但我无法将数组传递countProductCode给PopoverViewController's countProductCodes数组.
我一直在
"访问未知的'setCountProductCodes:'类方法"
错误.
这可能是我正在做的非常愚蠢的事情,但这让我发疯!
有人可以帮忙吗?
谢谢詹姆斯
亲爱的詹姆斯,我想你想仔细看看模型 - 视图 - 控制器范例.在你的应用程序中,你正试图实现某种"超级".让我解释一下这意味着什么:
在显然是控制器的MainViewController类中,还实现了模型的某些部分.这是一个坏主意,但在开始时是一个非常常见的.也许我误解了你的设计,但这是我将如何实现它:
模型 I将实现一个合适的模型对象,在您的情况下可以像使用属性的自定义NSObject子类一样简单NSMutableArray.此外,该模型将具有用于从互联网上检索数据的方法.这是对的:在模型中进行网络连接.您必须拥有- (void) refreshProductCode您可以从控制器调用的方法.如果你想变得非常花哨,可以使用一个NSOperation来封装下载(然后你会使用同步变量NSURLConnection,因为操作本身已经异步执行了)如果你对JSON字符串的解析需要更长时间,那就好了这也是在后台执行的,您的UI将保持响应.
所以现在模型正在下载你的东西 - 很棒,但我怎么知道什么时候完成?那么一旦完成,你就会从模型中发布通知.如果下载失败怎么办?您猜对了:发布失败的通知.
控制器需要显示模型数据的控制器首先获取模型对象.在这种情况下,模型对象是AppController上的属性.然后控制器具有该模型对象的属性并保留它,以便模型对象在控制器存在时不会消失.然后控制器还注册模型的通知.那么典型的下载工作怎么样呢?
-(void) refreshProductCode模型对象如何在视图控制器之间移动数据?视图控制器应该像黑手党一样操作:每个视图控制器都在需要知道的基础上工作.例如,如果您希望视图控制器显示产品的详细信息,则不会将包含所有产品的模型传递给控制器.相反,你会在详细视图控制器上有一个实例变量,它只包含一个生产模型对象,它包含描述文本,照片等所有信息.如果你想在你的应用程序中再次显示产品信息,那么你很酷可以重用该视图控制器,因为它只需要一个产品模型对象来完成它的工作.
| 归档时间: |
|
| 查看次数: |
7387 次 |
| 最近记录: |