我從永久核心數據存儲異步地發佈到Web服務器的條目。我希望在成功發佈後刪除每個關聯的託管對象。客戶c與自定義代理和異步數據的幫助
我的問題是,我同時填充商店和發佈帖子,所以我不能做一個系列發佈/刪除操作。有沒有辦法標記對象進行刪除直到它與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
,但每次的參考都是針對最後一篇文章。有沒有辦法從回調函數中取回委託?
在創建時自動釋放委託對象處理內存泄漏。MyUploadDelegate * delegate = [[[MyUploadDelegate alloc] init] autorelease];我已經測試過,並且不能提出任何會失敗的邊緣情況。 – CodeWombat 2010-11-11 22:08:52
除非您無法取消連接,例如,當您進入後臺或打電話時。保持跟蹤代表和連接是設備上的好公民。 – 2010-11-11 22:38:50