序章
現在のアプリケーションには、カスタム セル オブジェクトを保持する UITableView があります。カスタム UIViewCellObjects は、標準の UITableViewCell クラスから単純にサブクラス化されています。カスタム セルには、実行中のバックグラウンド アップロードに関する情報が保持され、完了率などで更新されます。
カスタム セル オブジェクトは、バックグラウンドで実行されているアップロード プロセスからの NSNotifications をリッスンし、関連する通知を受け取ると、独自のビュー コントロールを新しい情報 (アップロードの割合など) で更新するだけです。
アップロード プロセスが完了したら、アクティブなアップロード オブジェクトの配列を並べ替えて、次のようにテーブルビューをリロードします。
-(void) uploadFinished: (NSNotification*)notification
{
NSDictionary *userInfo = [notification userInfo];
NSNumber *uploadID = [userInfo valueForKey:@"uploadID"];
if (uploadID.integerValue == uploadActivity.uploadID)
{
[[ApplicationActivities getSharedActivities] markUploadAsFinished:uploadActivity];
[parentTable reloadData];
[self setUploadComplete];
}
}
このメソッドは tableviewcell オブジェクトで実行され、ご覧のとおり、配列がソートされた直後に独自の UITableView を呼び出してデータをリロードします。markUploadAsFinishedメソッドは単に配列を並べ替えて、新しく完了したアップロードが一番上に来るようにするだけなので、UITableView ではこのように表示されます。
問題
今私が抱えている問題は、このメソッドが呼び出されると、次のエラーが発生する ことがあることです:
プロセス全体が正常に実行され、完了したアップロードが UItableview の最初に表示されることもあれば、一見ランダムに失敗することもあります。ここで何が起こっているのか、私にはまったくわかりません。
カスタム セルは、次のように .NIB ファイルから読み込まれます。
UploadCell *cell = [activeUploadsTable dequeueReusableCellWithIdentifier:@"UploadProgressCell"];
if (cell == nil)
{
[[NSBundle mainBundle] loadNibNamed:@"UploadCellView" owner:self options:nil];
cell = customCell;
}
ここで何が起こっているかについて手がかりを持っている人はいますか?
編集
まず、このエラーを追跡して、次の行に表示されるようにしました。
カスタム セル オブジェクト内で呼び出されます。
さらに、メソッドを送信するインスタンスが変更される可能性があるようです。私もこのエラーを受け取りました:
'NSInvalidArgumentException', reason: '-[UIScrollViewPanGestureRecognizer tableView:numberOfRowsInSection:]: unrecognized selector sent to instance
ここで何が起こっているのか本当にわかりません。