2011-06-06 70 views
0

好吧,我完全难倒了。初始化表时传递参数

此作品在CouponListViewController.m:

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    self.couponList = [CouponDatabase database].couponList; 
    self.title = @"Coupon List"; 
} 

而且这部作品在CouponDetailViewController.m:

- (void)viewWillAppear:(BOOL)animated { 
    CouponDetails *details = [[CouponDatabase database] couponDetails:_uniqueId]; 
    if (details != nil) { 
     [_merchantNameLabel setText:details.merchantName]; 
     [_longDealLine1Label setText:details.longDealLine1]; 
     //....blah...blah// 
    } 
} 

但是,当我改变从这个CouponDatabase.h(其与上面的作品) :

@class CouponDetails; 

@interface CouponDatabase : NSObject { 
    sqlite3 *_database; 
} 

+ (CouponDatabase *)database; 
- (NSArray *)couponList; 
- (CouponDetails *)couponDetails:(int) uniqueId; 

...这(如果我手动设置的值'selectedC ategory”里面的方法):

@class CouponList; 
@class CouponDetails; 

@interface CouponDatabase : NSObject { 
    sqlite3 *_database; 
} 

+ (CouponDatabase *)database; 
- (CouponList *)couponList:(int) selectedCategory; 
- (CouponDetails *)couponDetails:(int) uniqueId; 

,然后更改CouponListViewController.m这样:

1 - (void)viewWillAppear:(BOOL)animated { 
2  [super viewWillAppear:animated]; 
3  self.couponList = [[CouponDatabase database] couponList:_selectedCategory]; 
4  self.title = @"Coupon List"; 
5 } 

我得到上面3行此错误:

warning: incompatible Objective-C types 'struct CouponList *', 
expected 'struct NSArray *' when passing argument 1 of 'setCouponList:' 
from distinct Objective-C type 

问题:是'self.couponlist'行的正确格式,以便我可以将一个整数传递给CouponDatabase以便在couponList方法中使用?

编辑:我知道couponDetails现在是一个类而不是一个数组 - 我只是不知道如何格式化线来初始化表数据。

我希望这是有道理的 - 任何对此的帮助将非常感激。

在此先感谢!

添加CouponListViewController.h:

#import <UIKit/UIKit.h> 

@class CouponDetailsViewController; 

@interface CouponListViewController : UITableViewController { 

    NSArray *_couponList; 
    CouponDetailsViewController *_couponDetails; 
    int _selectedCategory; 
} 

@property (nonatomic, retain) NSArray *couponList; 
@property (nonatomic, retain) CouponDetailsViewController *couponDetails; 
@property(nonatomic, assign) int selectedCategory; 

@end 
+0

请添加您的“CouponListViewController.h”,问题可能是成员变量没有在那里正确声明。 – 2011-06-06 11:28:08

+0

加了 - 谢谢罗伯特! – truthsmiles 2011-06-06 11:33:44

回答

0

试着改变你的CouponListViewController.h这样:

#import <UIKit/UIKit.h> 

@class CouponDetailsViewController; 

@interface CouponListViewController : UITableViewController { 

    CouponList *_couponList; 
    CouponDetailsViewController *_couponDetails; 
    int _selectedCategory; 
} 

@property (nonatomic, retain) CouponList *couponList; 
@property (nonatomic, retain) CouponDetailsViewController *couponDetails; 
@property(nonatomic, assign) int selectedCategory; 

@end 

哎呀,我把我的反应,我自己原来的职位,并应该把它放在这里:

编辑:好的,我按照Robert的建议对CouponListViewController.h进行了更改,并且增加了@class CouponList;如下:

#import <UIKit/UIKit.h> 

@class CouponList; 
@class CouponDetailsViewController; 

@interface CouponListViewController : UITableViewController { 

    CouponList *_couponList; 
    CouponDetailsViewController *_couponDetails; 
    int _selectedCategory; 
} 

@property (nonatomic, retain) CouponList *couponList; 
@property (nonatomic, retain) CouponDetailsViewController *couponDetails; 
@property(nonatomic, assign) int selectedCategory; 

@end 

我仍然在CouponListViewController错误。米:

#import "CouponListViewController.h" 
#import "CouponDatabase.h" 
#import "CouponList.h" 
#import "CouponDetailsViewController.h" 

@implementation CouponListViewController 
@synthesize couponList = _couponList; 
@synthesize couponDetails = _couponDetails; 
@synthesize selectedCategory = _selectedCategory; 

- (void)viewWillAppear:(BOOL)animated { 

    [super viewWillAppear:animated]; 
    self.couponList = [CouponDatabase database].couponList; // <--- ERROR 1 
    self.title = @"Coupon List"; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [_couponList count]; // <--- WARNINGS 1 AND 2 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (self.couponDetails == nil) { 
     self.couponDetails = [[[CouponDetailsViewController alloc] initWithNibName:@"CouponDetailsViewController" bundle:nil] autorelease];   
    } 
    CouponList *info = [_couponList objectAtIndex:indexPath.row]; // <--- WARNING 3 
    NSLog(@"%@", info.uniqueId); 
    _couponDetails.uniqueId = info.uniqueId; 
    [self.navigationController pushViewController:_couponDetails animated:YES]; 
} 

ERROR 1:在一些请求构件 'couponList' 不是一个结构或联合

警告1: 'CouponList' 可以不为 '-count' 响应

警告2:返回时将指针整数,未作铸

警告3:“CouponList”可不回应“-objectAtIndex:”

+0

好吧,我改变了它,但现在有同样的错误,再加上10多...给我一点时间,我会试着看看我能否弄清楚。 – truthsmiles 2011-06-06 12:22:16

+0

好的,我不得不添加“@class CouponList” CouponListViewController.h的顶部,现在我回到相同的错误加上3个警告。我会在上面发布详情。 – truthsmiles 2011-06-06 12:30:19

+0

添加了您的代码并发布了带有错误的实现。 – truthsmiles 2011-06-06 12:42:10

0

在你原来的代码CouponDatabase,哟u的改变的定义:

- (NSArray *)couponList; 

这一个:

- (CouponList *)couponList:(int) selectedCategory; 

尽管如此,您使用的返回值作为数据源的列表视图控制器,所以。在这里你有一个不匹配,你应该修复。如何解决它取决于你的应用程序的语义。你想用- (CouponList *)couponList:(int) selectedCategory;做什么?什么确实会返回这个选择器?什么是接口CouponList?也许你应该改变行:

self.couponList = [[CouponDatabase database] couponList:_selectedCategory]; 

,以便它返回一个NSArray从CouponList建设。但是我不确定你的对象的语义,所以这可能不是这种情况。

+0

谢谢塞尔吉奥 - 好吧,我做了你所建议的改变,它摆脱了错误,但3个警告仍然存在。我会尽力调查并弄清楚。我不确定我是否理解你的问题,但我试图用按钮设置“selectedCategory”,然后将它传递给CouponList,以便它返回一个基于按下的按钮的列表,并将它显示在表格视图中。非常感谢你看我的问题! – truthsmiles 2011-06-06 13:22:42

+0

@truthsmiles:实际上,我没有提出任何改变。我指着一个不匹配的地方。 :-)你做了什么改变? – sergio 2011-06-06 13:33:25

+0

哈哈 - 抱歉 - 我改变了:self.couponList = [[CouponDatabase数据库] couponList:_selectedCategory];我觉得这是正确的道路,你让我面临重大障碍 - 现在我只需要学习更多。顺便说一句,同时,我正在另一个“测试”应用程序有一个UIViewController与自定义按钮,当按下将显示正确的tableview。我只是解决了这个问题,所以我需要做的就是弄清楚如何将参数从按钮传递给tableview,并且我的状态很好!谢谢你的帮助!你们都很棒! – truthsmiles 2011-06-06 14:02:37

相关问题