Использование MGTwitterEngine Singleton - PullRequest
0 голосов
/ 19 мая 2011

Я прочитал о Измените делегата MGTwitterEngine и не получите его. Я надеюсь, что кто-то может объяснить это снова.

Исходя из того, что я знаю, я создаю оболочку для MGTwitterEngine и настраиваю делегата внутри оболочки. Поэтому, чтобы упростить процесс, я пытаюсь создать экземпляр интерфейса NSArray для интерфейса, который я буду передавать по мере необходимости.

Вот код полученного статуса:

- (void)statusesReceived:(NSArray *)statuses forRequest:(NSString *)connectionIdentifier
{
    //NSLog(@"Got statuses for %@:\r%@", connectionIdentifier, statuses);

    [statusIds setObject:statuses forKey:connectionIdentifier];
}

Таким образом, я ожидаю, что sharedTwitterEngine может быть доступен любому объекту в проекте, если я сначала запрашиваю информацию и освобождаю statusContainer, используя новый результат, и передаю его моему рабочему объекту для дальнейшего использования.

Я не уверен, что это правильный путь, или есть более простые способы, которые я пропустил?

1 Ответ

1 голос
/ 19 мая 2011

Решение, предложенное постом SO, на который вы ссылаетесь, может быть реализовано следующим образом:

1) создайте оболочку для MGTwitterEngine;эта оболочка предоставит любой селектор MGTwitterEngine, который вам нужен, и добавит к каждому из них параметр, который идентифицирует контроллер представления, который его вызывает;

2) ваша оболочка MGTwitterEngine будет действовать как уникальный делегат для всех запросовотправлено;

3) для каждого запроса, полученного оболочкой от контроллера представления, оболочка будет хранить адрес контроллера представления в NSMutableDictionary, связанном с идентификатором twitter;

4) при ответевозвращается, делегат (который является тем же объектом, что и обертка) узнает, какой контроллер представления отправил запрос изначально (путем поиска в словаре идентификатор твиттера, который пришел с ответом), и перенаправит ответ на него.

Надеюсь, это поможет ....

РЕДАКТИРОВАТЬ:

это то, как вы могли бы сделать это (я включаю только 1 вызов API и только соответствующий код):

@interface TwitterClientViewController : UIViewController <MGTwitterEngineDelegate> {
}
@end

@implementation TwitterClientViewController;

- (void)requestListOfUsers:(NSString*)username {
    [twitterEngineSingleton getListsForUser:username requestDelegate:self];
}

- (void)requestSucceeded:(NSString*)connectionIdentifier {
    NSLog(@"Hello");
}
@end

@interface AdvancedTwitterEngine : NSObject <MGTwitterEngineDelegate> {
    MGTwitterEngine* _engine;
    NSMutableDictionary* _callerIds;
}
-(NSString*)getListsForUser:(NSString*)username requestDelegate:(id<MGTwitterEngineDelegate>)delegate;
@end

@implementation AdvancedTwitterEngine;

-(void)init {
    if (self = [super init]) {
        _engine = [[MGTTwitterEngine alloc] initWithDelegate:self];
        _callerIds = <init>
    }
    return self;
}

-(NSString*)getListsForUser:(NSString*)username requestDelegate:(id<MGTwitterEngineDelegate>)delegate {
    NSString* twId = [_engine getListsForUser:username];
    [_callerIds setObject:controller forKey:twId];
    return twId;
}

//-- delegate methods

- (void)requestSucceeded:(NSString*)connectionIdentifier {
    id<MGTwitterEngineDelegate> dlg = [_callerIds objectForKey:connectionIdentifier];
    [dlg requestSucceeded:connectionIdentifier];
}

@end
...