Различать вызовы одного и того же метода делегата - PullRequest
0 голосов
/ 03 ноября 2011

Давайте представим, что у меня есть метод: -[myClass getDataForUser:user], и когда он выполняется, он вызывает метод делегата gotData:, и результаты появляются в моем основном классе. Если я сделаю два звонка на getDataForUser:, например:

[myClass getDataForUser:@"user1"];
[myClass getDataForUser:@"user2"];

как я могу различить эти два вызова в методе делегата?

EDIT:

Библиотека - MGTwitterEngine, два вызова, которые я делаю, - -[_engine getDirectMessagesSinceID:1 startingAtPage:1]; и [_engine getSentDirectMessagesSinceID:1 startingAtPage:1];, а метод делегата - directMessagesReceived:forRequest:

Ответы [ 2 ]

1 голос
/ 03 ноября 2011

Используйте экземпляр MGTwitterEngine для каждого вызова и присвойте каждому экземпляру отдельный объект делегата. Внутри каждого из этих объектов делегата вы можете хранить идентификатор пользователя. Установите эти объекты делегатов, чтобы они могли принимать ваш исходный класс как их делегаты. Затем вы можете использовать делегат gotData: (id) data для пользователя: (NSString *). Не красиво, но может работать.

0 голосов
/ 03 ноября 2011

Добавить аргумент к методу делегата:

[delegate gotData:(id)data forUser:(NSString *)user]

Есть и другие способы, но не такие чистые и простые

Редактировать: ОК, он находится в библиотеке, поэтому его нельзя изменить. Однако у делегата есть аргумент for[something], в данном случае forRequest. Итак, все, что вам нужно сделать, это найти способ связать запрос с именем пользователя. Я предлагаю поместить их в карту, отображая request в user. Или, если у вас есть только два, вы можете просто создать пару переменных request1, request2 и user1, user2 и сохранить запрос и пользователя в соответствующих переменных, проверяя, какой идентификатор соответствует какому имени (в делегате):

if(thisRequest == request1) {
    thisUser = user1; 
} else {
    thisUser = user2;
}
...