Я застрял в этой проблеме, выглядит многопоточно, но я совершенно новичок в подобных темах. Мне нужна помощь в помощи!(iPhone), как подождать, когда метод закончен, один из его аргументов вызывает селектор
[Проблема Условия]
нужно вызвать метод, который имеет 3-х аргументов, один аргумент
@selector(myMethod:)
нужно позвонить (1) для несколько раз
нужно убедитесь, что каждый из переключателей (1) сделан для перехода к следующим этапам
@selector(myMethod:)
является создание xArray, массив объектов X, чтобы сделать его простымТак, по логике вещей у меня есть один xArray с multithreads доступа к нему, и каким-то образом нужно обработать все элементы xArray ...
[Мысли]
performSelector не полезно, потому что один мне нужно поставить это метод с @selector аргументом ...
[Псевдо-Code]
// The Starting Point of Alghorithm
- (void)initialCallerMethod {
for(int i=0; i < [calendarArray count]; i++) {
calendar = [calendarArray objectAtIndex:i];
// fetch the events feed
NSString* alternateLink = [calendar alternateLink];
NSURL* feedURL = [NSURL URLWithString:alternateLink];
if (feedURL) {
[self setEventFeed:nil];
GDataQueryCalendar *query = [GDataQueryCalendar calendarQueryWithFeedURL:feedURL];
[query setMaxResults:100];
GDataServiceGoogleCalendar *service = [[[CalendarService alloc] init] calendarService];
GDataServiceTicket *ticket;
ticket = [service fetchFeedWithQuery:query
delegate:self
didFinishSelector:@selector(calendarEventsTicket:finishedWithFeed:error:)];
if ([self eventFetchError] == nil) {
// query succeeded
NSLog(@"Query succeeded");
[self howToDoThis];
}
}
}
}
// @selector's method with 3 arguments
- (void)calendarEventsTicket:(GDataServiceTicket *)ticket
finishedWithFeed:(GDataFeedCalendarEvent *)feed
error:(NSError *)error {
[self setEventFeed:feed];
}
//
// Somewhere I want to do something like this
//
- (void) howToDoThis {
GDataFeedCalendarEvent* feed = [self eventFeed];
NSArray *entries = [feed entries];
// for now, I get's zero...
NSLog(@"FEED ENTRIES COUNT: %d", [entries count]);
for (int idx = 0; idx < [entries count]; idx++) {
// to make it simple, I'm just accumulating elements of array
id elm = [entries objectAtIndex:idx];
[anArrayToSumUp addObject: elm ];
}
}
Я действительно переполнен ...
Пожалуйста, советы ...
Катсух
==== некоторый прогресс, или борьба ... 2009/10/29
Тим, я сделал некоторое чтение для NSInvocation и NSInvocationOperation. Звучит полезно. Теперь, знаете ли вы, как передать «адрес селектора»? вы видите, я могу установить цель, селектор и аргументы с NSInvocation , но как я могу передать адрес @selector (...)?
[Перед использованием NSInvocation] билет = [сервис fetchFeedWithQuery: запрос делегат: себя didFinishSelector: @selector (calendarEventsTicket: finishedWithFeed: ошибка :)];
[Попытка использовать NSInvocation, становится ближе для передачи селектор в качестве аргумента, за исключением]
retInvo = [NSInvocation invocationWithMethodSignature: [самостоятельного methodSignatureForSelector: @selector (finishMethod: withArray :)]]; [retInvo setTarget: self];
// * Это не в порядке * [retInvo setSelector: @selector (finishMethod: withArray :)]; // Это не нормально
[retInvo setArgument: & calendar atIndex: 2]; [retInvo setArgument: & события atIndex: 3];
NSInvocationOperation * invoFinishOperation = [[NSInvocationOperation alloc] initWithInvocation: retInvo];
Очень мало людей когда-либо должны напрямую использовать NSInvocation. –
Тогда что бы вы порекомендовали? – Tim
Тим, спасибо, что оставил мне ключевое слово, NSInvocation. Я сделал некоторое чтение на нем и сделал некоторый прогресс. Я не мог опубликовать длинное сообщение здесь, поэтому я редактировал вопрос. Пожалуйста, проверьте его. Спасибо. – Katsumi