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 

Это то, что мой код выглядит для настройки протоколов и делегатов

mainViewController.h

#import "SeriesDataClass.h" 

@interface MatchingSeriesViewController : UIViewController <GetSeriesViewParsedData> 
{ 

mainViewController.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]; 
//.. 
} 

requestClass.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; 

seriesDataClass.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]; 
//.. 

mainViewController.m

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

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

Так что мой вопрос, что мне не хватает в наборе до этого протокола/delgate для этого не будет правильно работать?

Надеюсь, что структура вопроса имеет смысл, если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

ответ

1

Ваша проблема заключается в том, что вы создаете 2 экземпляра вашего SeriesDataClass, один в MainViewController, а другой в RequestClass. Таким образом, экземпляр, который вызывает метод делегирования, не является тем же самым экземпляром, что и главный контроллер представления, установленным в качестве делегата. Когда вы создаете экземпляр RequestClass в MainViewController, вам необходимо передать serialDataClass (созданный экземпляр) в свойство в 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 вы должны создали эту собственность:

@property (strong,nonatomic) SeriesDataClass *seriesDataInstance; 

Тогда в RequestClass, это:

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

должен быть заменен только:

[self.seriesDataInstance recivedData:uncompressedData]; 

Я изменил некоторые из капитализации, чтобы отразить то, как вы должны это делать. Классы должны начинаться с заглавных букв, а экземпляры и методы должны начинаться с строчных букв.

+0

, есть ли у вас какие-либо подсказки о том, как это сделать. Я даже не знаю, что искать в google, который находится на тех же строках, что и проблема, которую я испытываю. – HurkNburkS

+0

@HurkNburkS, см. Мое редактирование. – rdelmar

+0

okay cool будет читать его медленно, а затем попытаться реализовать его, я мог бы быть 15 минут: P Спасибо за редактирование: P – HurkNburkS

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]; 
+0

В порядке я изменил это, но все еще не добрался до этого метода. – HurkNburkS

+0

@HurkNburkS, почему вы назначаете initDedClass объект с GetSeriesResultItem? И затем в вашей следующей строке вы [SetResultItem setDelegate: self]. Что такое SeriesResultItem? – rdelmar

+0

извините seriesResultClass было старым именем, на котором я написал этот вопрос для .. тогда решил попробовать что-то, что я создал новый класс, который называется seriesDataClass, который я забыл обновить код вопроса с помощью .. просто игнорировать SeriesResultItem, я сейчас его изменю. но im 100% уверен, что мой код вызывает правильные имена в моем приложении. – HurkNburkS