我試圖將一個託管對象的現有屬性值傳遞到模態segue視圖進行編輯。從「編輯模式」,我從一個UITableViewController子類(BreadRackTableViewController),通過一個嵌入式UINavigationController,使用一個模式segue到一個UIViewController子類(EditBreadRackTableViewController)。正常TableViewCell選擇推到另一個UITableViewController子類,但這暫時不重要。正在檢索UITableViewCell標籤值以傳遞到模態編輯視圖
我添加屬性,以我的編輯視圖控制器頭(和@synthesized),充當干將:
@property (nonatomic, strong) id existingBreadRackDataName;
@property (nonatomic, strong) id existingBreadRackDataDetails;
我想要做的是與現有的Core填充編輯視圖的場數據實體屬性,這些屬性先前已由用戶設置(理論上)。如果傳遞字符串值,我可以獲取數據以顯示,但我需要檢索並傳遞現有數據。
這是我目前有:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"editBreadRackSegue"])
{
EditBreadRackTableViewController *ebrtvc = (EditBreadRackTableViewController *)[segue destinationViewController];
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
BreadRackClass *breadRackClass = [[self fetchedResultsController]objectAtIndexPath:indexPath];
// [ebrtvc setBreadRackClass:breadRackClass];
ebrtvc.existingBreadRackDataName = breadRackClass.breadRackDataName;
ebrtvc.existingBreadRackDataDetails = [breadRackClass valueForKey:@"breadRackDataDetails"];
}
}
這最後兩行代碼...
ebrtvc.existingBreadRackDataName = breadRackClass.breadRackDataName;
ebrtvc.existingBreadRackDataDetails = [breadRackClass valueForKey:@"breadRackDataDetails"];
......他們都回零。如果我指定了一個文字字符串,那麼這個文字字符串顯示出它需要的地方。
所有這麼說,我的問題是:
如何檢索屬性的鍵值對選定的行(或只是爲textLabel和detailTextLabels),並將其分配給我的二傳手?
解決方案:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"editBreadRackSegue"])
{
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
BreadRackClass *breadRackClass = [[self fetchedResultsController]objectAtIndexPath:indexPath];
[segue.destinationViewController setExistingBreadRackDataName:[breadRackClass valueForKey:@"breadRackDataName"]];
[segue.destinationViewController setExistingBreadRackDataDetails:[breadRackClass valueForKey:@"breadRackDataDetails"]];
}
// code for other segues here...
}
我結束了去除ebrtv變量,並清理代碼一點點。儘管如此,使用indexPathForCell:發件人而不是indexPathForSelectedRow當聲明我的indexPath爲breadRackClass。
請原諒我,因爲我的Objective-C知識尚處於起步階段,但是如何使用適用於我的setters的適當值(並且不會使我從上面的代碼中排除的其他prepareForSegue語句失效無關緊要)? –
我編輯了我的答案,以更好地解決您的問題。 –
我把代碼放在那裏,正如建議的那樣,但增加了didSelectRowAtIndexPath創建了一些導航欄損壞。 我在我的viewDidLoad中聲明瞭一個編輯按鈕,如果在編輯過程中選中了表格單元格,它會以不同的方式進行插入。我在想,didSelectRowAtIndexPath會干擾,它看起來像。 雖然我對這兩個字段(existingBreadRack..etc)的NSLog語句仍然返回「(null)」。 –