2011-06-06 71 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

相關問題