0

我正在尝试将一些数据传递回我的 UIView,它有点复杂,我将尝试解释它。

我有我的

mainViewController // request is made to RequestClass
requestClass // Request is sent off to DB for data, data is returned then passed to seriesDataClass
seriesDataClass // sorts the data and then sends back the needed info to mainViewController using protocol & delegates

这就是我的代码设置协议和委托的样子

主视图控制器.h

#import "SeriesDataClass.h"

@interface MatchingSeriesViewController : UIViewController <GetSeriesViewParsedData>
{

主视图控制器.m

#import "SeriesDataClass.h"
// this is where I set up my protocols delegate.
- (void)viewDidLoad
{
    //..
    // get delegate ready
    SeriesDataClass *seriesDataClass = [[SeriesDataClass alloc] init];

    [seriesDataClass setDelegate:self];
//..

// pass data over to requestClass so you can get the info from the DB
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//..
   [requestClass GetSeries:requestID];
//..
}

请求类.m

// dose a bunch of stuff then calls seriesDataClass and passes all of its information over to it

//.. 
 SeriesDataClass *seriesDataClass = [[SeriesDataClass alloc] init];
[seriesDataClass recivedData:uncompressedData];
//..

seriesDataClass.h

#import <Foundation/Foundation.h>

// This passes data back to the mainViewController
@protocol GetSeriesViewParsedData <NSObject>
- (void)sendGetSeriesArrays:(NSDictionary *)series LSeries:(NSDictionary *)lSeries;
@end

@interface SeriesDataClass : NSObject <NSXMLParserDelegate> {
//..

}
@property (assign, nonatomic) id <GetSeriesViewParsedData> delegate;

系列数据类.m

@implementation SeriesDataClass

@synthesize delegate;

// then in a method later on i call the delegate to pass the information back to mainViewController but this dosnt do anything atm.

//..
[self.delegate sendGetSeriesArrays:seriesDictionary LSeries:lSeriesDictionary];
//..

主视图控制器.m

// then back in the mainViewController class I Have the method

- (void)sendGetSeriesArrays:(NSDictionary *)series LSeries:(NSDictionary *)lSeries {
// this method is never accessed
}

所以我的问题是我在这个协议/委托的设置中缺少什么,因为它不能正常工作?

我希望问题的结构是有意义的,如果您需要更多信息,请告诉我。

4

2 回答 2

1

改变这个:

#import "SeriesDataClass.h"
// this is where I set up my protocols delegate.
- (void)viewDidLoad
{
//..
// get delegate ready
SeriesDataClass *seriesDataClass = [[GetSeriesResultItem alloc] init];

[seriesDataClass setDelegate:self];
于 2013-05-16T01:41:39.437 回答
1

您的问题是您正在创建 SeriesDataClass 的 2 个实例,一个在 MainViewController 中,另一个在 RequestClass 中。因此,调用委托方法的实例与主视图控制器将自己设置为委托的实例不同。当您在 MainViewController 中创建 RequestClass 的实例时,您需要将 seriesDataClass(您创建的实例)传递给 RequestClass 中的一个属性,以便它可以使用同一个实例。

您应该在 MainViewController 中创建一个属性:

@property (strong,nonatomic) SeriesDataClass *seriesDataClass;

viewDidLoad 方法应如下所示:

- (void)viewDidLoad {
    self.seriesDataClass = [[SeriesDataClass alloc] init];
    [self.seriesDataClass setDelegate:self];
}

然后在 didSelectRowAtIndexPath 中,创建您的 RequestClass 实例,并将其传递给 seriesDataClass:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
   RequestClass *requestClass = [[RequestClass alloc] init];
   requestClass.seriesDataInstance = self.seriesDataClass;
   [requestClass GetSeries:requestID];
}

在 RequestClass 的 .h 中,您需要创建该属性:

@property (strong,nonatomic) SeriesDataClass *seriesDataInstance;

然后在 RequestClass 中,这个:

SeriesDataClass *seriesDataClass = [[SeriesDataClass alloc] init];
[seriesDataClass recivedData:uncompressedData];

应该替换为:

[self.seriesDataInstance recivedData:uncompressedData];

我改变了一些大小写,以反映你应该这样做的方式。类应以大写字母开头,实例和方法应以小写字母开头。

于 2013-05-16T02:13:50.197 回答