2017-11-24 1 views
0

BLE로부터받은 주변 장치를로드하는 tableview가 있습니다. 이 NSMutableArray은 appDelegate에서 유지 관리됩니다. 애플 리케이션에 새로운 주변 장치가 수신 될 때마다이를 어레이에 추가한다.tableview : cellForRowAtIndexPath가 호출되지 않습니다.

제 문제는 모든 것이 처음 실행될 때 제대로 작동하고 그에 따라 테이블이 업데이트되며 잠시 동안 앱을 사용한다는 것입니다. 그런 다음 (CoreData, UserDefaults in app) 내 앱을 재설정하고 초기 화면으로 돌아갑니다.

은 내가 응용 프로그램 데이터를 재설정하고 다시 내가있는 tableview의 주변을 표시 화면에 와서 내 응용 프로그램

class func showStartScreen() { 
    let storyboard = UIStoryboard.init(name: "Main", bundle: nil) 
    let nav = storyboard.instantiateInitialViewController() 
    (UIApplication.sharedApplication().delegate)!.window!!.rootViewController = nav 
    (UIApplication.sharedApplication().delegate)!.window!!.makeKeyAndVisible() 
} 

의 초기 화면으로 돌아 오기 위해 다음 코드를 사용하여, 그것은 UPDAT하지 않습니다 . 주변 장치가 배열에 추가 된 것을 볼 수 있지만 테이블 뷰를 다시로드하면 tableview:cellForRowAtIndexPath이 호출되지 않습니다. 하나의 더미 셀을 테이블에 추가하려고 시도했지만 그 시점에서 더미 셀에 대해서만 tableview:cellForRowAtIndexPath이 제대로 호출되었습니다.

numberOfRowsInSection은 올바른 값을 반환하고 내 데이터 소스와 델리게이트도 올바르게 설정됩니다. ScanVC에서

func discoveredPeripheral(peripheral: CAPeripheral) { 
    print("added peripheral") 
    var isDuplicate:Bool = false 
    for object in scannedPeripherals! { 
     if object is CAPeripheral { 
      let newPeripheral = object as! CAPeripheral 
      // Need to add check of nil 
      if newPeripheral.peripheral_UUID == peripheral.peripheral_UUID { 
       isDuplicate = true 
      } 
     } 
    } 
    if (!isDuplicate) { 
     self.scannedPeripherals?.addObject(peripheral) 
    } 
} 

:

func discoveredPeripheral(peripheral: CAPeripheral) { 

    dispatch_async(dispatch_get_main_queue()) { 
     self.peripheralTableView.reloadData() 
    } 
} 

희망은 내가 잘 설명했다 나는 목록을 스캔이 BLE 주변 AppDelegate에에서

시작될 때마다 선택을 취소합니다. 표시 할 데이터가 명확하게 표시 될 때 tableview:cellForRowAtIndexPath이 호출되지 않는 이유는 무엇입니까?

+0

테이블 뷰의 델리게이트 및 데이터 소스를 설정했는지 확인하십시오. – iPatel

+0

테이블을 다시로드하고 있습니까? 적절한 코드 스 니펫을 게시하십시오. – mikep

+0

@mikep는 주변 장치를 추가하고 데이터를 다시로드하는 코드를 추가했습니다. –

답변

0

CoreData 및 UserDefaults를 지운 후에 초기 viewController로 돌아왔다면, CoreData에 주변 장치를 저장하고 청소하기 때문에 tableView에 아무것도 표시되지 않는다고 가정합니다. 초기 컨트롤러에 오면 discoveredPeripheral으로 전화하십시오.

+0

코어 데이터에 주변 장치를 저장하지 않습니다. ScanVC가로드 될 때마다 새로운 검색을합니다. 데이터를 수신했지만 cellForRowAtIndexPath는 테이블 뷰를 다시로드 할 때 호출되지 않는다고 언급했습니다. –

관련 문제