我對xcode很陌生,我正在嘗試開發一個示例應用程序,它基本上是一個嵌入式tableview,它有很多級別。我有一個plist存儲每個tableview的單元格。如果細胞沒有孩子,那麼一旦細胞被按下,我希望能夠進入一個詳細的視圖。最終,我希望能夠根據數據類型轉到不同的詳細視圖。爲此,我創建了故事板的詳細視圖,將我的視圖控制器拖到我的詳細視圖中,以創建手動「推」漸變,並將其標記爲「segue1」。通過故事板和xcode正確創建手動segue
編輯:源代碼here
接下來,我填寫了我認爲是必要的功能,這個工作,這是調用[self performSegueWithIdentifier:@"segue1" sender:myString];
,其中MyString的是電池我的標題選擇。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//Check the dictionary to see what cell was clicked
NSDictionary *dict = [self.tableDataSource objectAtIndex:indexPath.row];
NSString *myString = [dict objectForKey:@"Title"];
NSDictionary *dictionary = [self.tableDataSource objectAtIndex:indexPath.row];
NSArray *children = [dictionary objectForKey:@"Children"];
//If there is no children, go to the detailed view
if([children count] == 0)
{
[self performSegueWithIdentifier:@"segue1" sender:myString];
}
else{
//Prepare to tableview.
DrillDownViewController *rvController = [[DrillDownViewController alloc] initWithNibName:nil bundle:[NSBundle mainBundle]];
//Increment the Current View
rvController.CurrentLevel += 1;
//Set the title;
rvController.CurrentTitle = [dictionary objectForKey:@"Title"];
//Push the new table view on the stack
[self.navigationController pushViewController:rvController animated:YES];
rvController.tableDataSource = children;
}
}
最後,我打電話給準備for segue尋找segue標籤segue1。
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([[segue identifier] isEqualToString:@"segue1"])
{
DrillDownDetailController *dvController = [[segue destinationViewController] visibleViewController];
//DrillDownDetailController *dvController = [[DrillDownDetailController alloc] initWithNibName:nil bundle:[NSBundle mainBundle]];
[dvController setItemName:(NSString *)sender];
[self.navigationController pushViewController:dvController animated:YES];
}
}
我想這會工作,但由於某種原因,每當代碼達到[self performSegueWithIdentifier:@"segue1" sender:myString];
,它與錯誤
*****打破終止應用程序由於未捕獲的異常「NSInvalidArgumentException」,究其原因: '接收器()具有標識符沒有賽格瑞 'segue1'' *第一擲調用堆棧: (0x14b4022 0xeb4cd6 0xdf61b 0x3590 0xa85c5 0xa87fa 0x93d85d 0x1488936 0x14883d7 0x13eb790 0x13ead84 0x13eac9b 0x139d7d8 0x139d88a 0x17626 0x23ed 0x2355爲0x1) 終止稱爲拋出異常(LLDB )
我不明白爲什麼它告訴我,它已經定義在故事板和代碼中時找不到segue1。
我可能會在這裏完全關閉,因爲我沒有使用segues,但嘗試聲明'DrillDownDetailController * dvController'作爲實例變量,然後在'prepareForSegue'中設置您需要在VC上的任何屬性。不要把風險投資推到海軍控制員身上,然後再進行調整。 – mkral
@mkral你能否詳細說明「不要把VC推到海軍控制員的準備中,然後再進行調整」?因此,刪除pushViewController行並將該行放入新的performSegue函數中? – foboi1122
我會添加一個格式化的答案。如果它不起作用希望別人能來 – mkral