これについて多くの質問があることは知っていますが、解決策を見つけることなく、それぞれの質問を調べました。チュートリアルからテーブルビューの行の位置を編集するためのコードを取得しましたが、それは完全に機能しますが、ビューを変更してからtableViewページに戻るたびに(ViewDidAppearメソッドが発生すると思います)、編集されたすべての行前の位置に戻ります。これは私のコードです:
ボタンに関連するアクションを編集します。
- (void)editAction:(id)sender
{
if(self.editing)
{
[super setEditing:NO animated:NO];
[[self tableView] setEditing:NO animated:NO];
[[self tableView] reloadData];
[self.navigationItem.leftBarButtonItem setTitle:@"Edit"];
[self.navigationItem.leftBarButtonItem setStyle:UIBarButtonItemStylePlain];
[_tableData removeAllObjects];
}
else
{
[super setEditing:YES animated:YES];
[[self tableView] setEditing:YES animated:YES];
[[self tableView] reloadData];
[self.navigationItem.leftBarButtonItem setTitle:@"Done"];
[self.navigationItem.leftBarButtonItem setStyle:UIBarButtonItemStyleDone];
[_tableData removeAllObjects];
}
}
編集方法:
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
NSString *item = [self.datas objectAtIndex:fromIndexPath.row];
[self.datas removeObjectAtIndex:fromIndexPath.row];
[self.datas insertObject:item atIndex:toIndexPath.row];
}
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
// Return NO if you do not want the item to be re-orderable.
return YES;
}
ViewDidAppear
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[_tableData removeAllObjects];
// Fetch the devices from persistent data store
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Data"];
self.datas = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
[self.tableView reloadData];
}
cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
if (tableView == self.searchDisplayController.searchResultsTableView) {
cell.textLabel.text = [_searchDati objectAtIndex:indexPath.row];
} else {
NSString *string;
//configure cells
NSManagedObject *data = [self.datas objectAtIndex:indexPath.row];
string = [NSString stringWithFormat:@"%@", [data valueForKey:@"name"]];
[cell.detailTextLabel setText:nil];
cell.textLabel.text = string;
//tableData array used for filtering
[_tableData addObject:string];
}
return cell;
}
NSMutableArray tableData は、UISearchbar
. どこに問題があるのか わかりません。コアデータは に関連している@property (strong) NSMutableArray *datas;
ので、配列を変更しても問題ないと思いましたが、そうdatas
ではないかもしれません。前もって感謝します。