Передать параметр при инициализации таблицы - PullRequest
0 голосов
/ 06 июня 2011

Ладно, я здесь совершенно тупой.

Это работает в 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;

... к этому (что работает, если я вручную устанавливаю значение selectedCategory внутри метода):

@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

Ответы [ 2 ]

0 голосов
/ 06 июня 2011

В исходном коде для CouponDatabase вы меняете определение:

- (NSArray *)couponList;

для этого:

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

Тем не менее, вы используете это возвращаемое значение в качестве источника данных для контроллера представления списка, поэтому. Здесь у вас есть несоответствие, которое вы должны исправить. Как это исправить, зависит от семантики вашего приложения. Что вы пытаетесь сделать с - (CouponList *)couponList:(int) selectedCategory;? Что действительно возвращает этот селектор? Что такое интерфейс CouponList? Возможно, вам следует изменить строку:

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

, чтобы он возвращал сборку NSArray из CouponList. Но я не уверен в семантике ваших объектов, так что это может быть не так.

0 голосов
/ 06 июня 2011

Попробуйте изменить свой 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

К сожалению, я разместил свой ответ в своем оригинальном сообщении и должен был поставить его здесь:

Редактировать: Хорошо, я внес изменения в 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.m:

#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];
}

ОШИБКА 1: запрос на член 'couponList' в чем-то, что не является структурой или объединением

ПРЕДУПРЕЖДЕНИЕ 1: «CouponList» может не отвечать на «-count»

ПРЕДУПРЕЖДЕНИЕ 2: return возвращает целое число из указателя без приведения

ПРЕДУПРЕЖДЕНИЕ 3: «CouponList» может не отвечать на «-objectAtIndex:»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...