컨베이어가 각 캐 러셀 항목에 고유 한 tableview가 있고 추가 버튼을 누르면 새보기 컨트롤러로 이동하므로 tableview에 이름을 지정하고 항목을 연결할 수 있습니다 각 셀에 표시하십시오. 이제 저장 버튼을 누르면 캐 러셀 뷰 콘트롤러로 segue를 수행합니다. 내 prepareforsegue
은 다음과 같습니다 : 회전 목마 뷰 컨트롤러는 allBillSplitters
배열에서로드 회전 목마에 추가 된 항목이 표시되지 않습니다 표시됩니다세그먼트 데이터가로드되지 않도록 준비하십시오.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let destinationVC = segue.destination as! BillSplittersViewController
let passedBill: NSManagedObject = bill as NSManagedObject
destinationVC.allBillSplitters = getUpdatedSplitters()
print(2)
print(destinationVC.allBillSplitters)
destinationVC.billName = billName
destinationVC.bill = passedBill
}
. viewdidload
에서 캐로 셀을 다시로드하려고 시도하면 viewwillappear
또는 view willlayoutsubviews
은 아무 것도 변경되지 않지만 내가 viewdidlayoutsubviews
에서 수행하면 업데이트가되지만 위와 같은 결과는 그리 좋지 않습니다.
내가 prepareforsegue
의 배열을 인쇄 시도하고 viewdidload
과가 추가 된 항목과 viewdidload
에서 동일한없이 prepareforsegue
의 배열을 인쇄하지만이 추가 된 항목과 다시 인쇄 디버깅하려면하지만 난 그것을 볼 수 없습니다 로드 된보기에서.
도움이 될 경우 iCarousel을 사용하고 있습니다. 나는 이것에 새로운 것이고 무슨 일이 일어나고 있는지 확신 할 수 없으므로 나는 어떤 코드를 사용할 지 모른다. 나는 두 viewcontrollers에 대한 스토리 보드를 사용하고 있고 segue는 버튼 자체가 아닌 view에 붙어있다. 어떤 도움이라도 좋을 것입니다. 감사!
추가 정보 : 새 billSplitters 검색
@IBAction func saveButtonWasPressed() {
let managedContext = bill.managedObjectContext
if let splitter = splitter {
splitter.mutableSetValue(forKey: "items").removeAllObjects()
setBillSplitterValues(splitter)
setSelectedItemsToBillSplitter(splitter)
} else {
let entity = NSEntityDescription.entity(forEntityName: "BillSplitter", in: managedContext!)
let newBillSplitter = NSManagedObject(entity: entity!, insertInto: managedContext)
setBillSplitterValues(newBillSplitter)
setSelectedItemsToBillSplitter(newBillSplitter)
}
do {
try managedContext!.save()
}
catch let error as NSError {
print("Core Data save failed: \(error)")
}
self.performSegue(withIdentifier: "segueToBillSplitters", sender: self)
}
: 그래서
func getUpdatedSplitters() -> [BillSplitter] {
var allBillSplitters = [BillSplitter]()
let managedContext = bill.managedObjectContext
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "BillSplitter")
let predicate = NSPredicate(format: "ANY bills == %@", bill)
fetchRequest.predicate = predicate
do {
let results =
try managedContext!.fetch(fetchRequest)
allBillSplitters = results as! [BillSplitter]
} catch let error as NSError {
print("Could not fetch \(error), \(error.userInfo)")
}
return allBillSplitters
}
이 coredata 기존 'billSplitter'를 업데이트하거나 새로 추가하거나 저장 누르면, 다음, performSegue
를 호출 prepareForSegue
에있는 다음 coredata에서 모든 'billSplitters'를 가져와 대상보기 컨트롤러로 전달합니다.
나는 알림이 수신되었지만 아무런 변경이없는 경우 performSegue
을 호출하면 NSManagedObjectContextDidSave
관찰자가 도움이 될 것이라고 생각했습니다.
업데이트 : 나는의 ViewController로드, 신속하게 오래된 회전 목마에게 제스처를 보여주고 업데이트 된 회전 목마를 보여줍니다 때 내 saveButtonWasPressed
methodwhich에 다음과 같은 시도
. 여기에서 어디로 가야할지 모르겠다.
@IBAction func saveButtonWasPressed() {
DispatchQueue.global(qos: .background).async { [weak weakSelf = self] in
let managedContext = weakSelf?.bill.managedObjectContext
if let splitter = weakSelf?.splitter {
splitter.mutableSetValue(forKey: "items").removeAllObjects()
weakSelf?.setBillSplitterValues(splitter)
weakSelf?.setSelectedItemsToBillSplitter(splitter)
} else {
let entity = NSEntityDescription.entity(forEntityName: "BillSplitter", in: managedContext!)
let newBillSplitter = NSManagedObject(entity: entity!, insertInto: managedContext)
weakSelf?.setBillSplitterValues(newBillSplitter)
weakSelf?.setSelectedItemsToBillSplitter(newBillSplitter)
}
do {
try managedContext!.save()
}
catch let error as NSError {
print("Core Data save failed: \(error)")
}
DispatchQueue.main.async { [weak weakSelf = self] in
guard let weakSelf = weakSelf else { return }
weakSelf.performSegue(withIdentifier: "segueToBillSplitters", sender: self)
}
}
}
데이터가 변경되는 테이블 뷰에서'tableView.reloadData()'를 시도 했습니까? – faircloud
내가 가지고있는 테이블 뷰가 문제가 아니며, 그들이 가지고있는 회전 장치입니다. 그리고 회전식 장치를 다시로드하면 작업이 진행되지 않습니다. – Wazza
관련 코드의 나머지 부분을 게시 할 수 있다면 도움이 될 것입니다. 업데이트되지 않는 UI는 GCD 라이브러리를 사용하여 UI 업데이트를 주 스레드로 보내거나 주 스레드에서 다른 스레드를 보내서 차단되지 않도록 쉽게 수정 될 수 있습니다. – MikeG