Я отправляю записи из постоянного хранилища основных данных асинхронно на веб-сервер. Я хотел бы удалить каждый связанный управляемый объект после успешной публикации.
Моя проблема в том, что я одновременно заполняю хранилище и делаю посты, поэтому я не могу выполнить последовательную операцию пост / удаление. Есть ли способ пометить объект для удаления, пока не будет выполнен связанный вызов connectionDidFinishLoading
, а затем удалить его?
Я также предполагаю, что при использовании асинхронного NSURLRequests
приложение порождает несколько NSURLConnections
и запускает их одновременно. Я ошибаюсь в этом предположении?
(Обновление) Благодаря совету Uberhamster я пытался использовать делегатов, но у меня не получается. Вот как я решаю эту проблему. Я объявил протокол в классе, который обрабатывает сообщения, потому что именно там живет connectionDidFinishLoading
.
@protocol postDelegate
@optional
- (void)postCompleted;
@end
@interface makePosts : NSObject {
//...
id <postsDelegate> delegate;
}
@property (nonatomic, assign) id <postsDelegate> delegate;
//...
@end
@implementation makePosts
@synthesize delegate;
//...
- (void) connectionDidFinishLoading {
[delegate postCompleted];
}
//...
@end
И в классе, который получает данные из постоянного хранилища и порождает NSURLConnections
это то, что я делаю:
@interface myClass <postsDelegate>
//...
makePosts* makePostsObject;
@end
@implementation myClass
- (void) batchPost {
//...
for(NSManagedObject* obj in items) {
makePostsObject = [[makePosts alloc] init];
makePostsObject.delegate = self;
[makePostsObject setEntryName:[obj valueForKey:@"name"]]; // set reference here
NSString* post_data = [NSString stringWithString:[self createXMLPost:obj]];
[makePostsObject postdata:[obj valueForKey:@"name"]];
[makePostsObject release];
}
- (void) postCompleted
{
NSLog(@"posted entry for: %@", makePostsObject.entryName);
}
@end
Я думаю, что я неправильно делаю myClass
делегатом? postCompleted
вызывается для каждого сообщения, которое я делаю, но ссылка каждый раз для последнего сообщения. Есть ли способ вернуть делегата из функции обратного вызова?