UITableView reloadData循环

时间:2018-07-30 11:15:01

标签: swift uitableview cllocationmanager

在我的应用中,我正在根据用户的位置更新CLLocationManagerDelegate。我正在UITableView中进行此操作。现在,发生的事情是我的reloadData()将继续重新加载,因此不会绘制任何内容。当我注释掉print()调用后,一切都很好(没有课程的位置)。当我重新添加它时,extension RestaurantsViewController: CLLocationManagerDelegate { func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { if (locations.count > 0) { if (location?.coordinate.longitude != locations[0].coordinate.longitude && location?.coordinate.latitude != locations[0].coordinate.latitude) { location = locations[0] print("will reload table") self.tableView.reloadData() } } } } 被执行一次。之后,该表将继续重新加载。

public function usersListUploadAction(Request $request) {

    //  grab uploaded .csv file
    $file = $_FILES["file"]["tmp_name"];
    $fileimplode = implode("/", $file);

    // convert .csv if made on mac
    if (!ini_get("auto_detect_line_endings")) {
        ini_set("auto_detect_line_endings", '1');
    }
    //  create associative array from .csv
    $reader = Reader::createFromPath($fileimplode);

    $addedUsers = $reader->fetchAssoc();
    $em = $this->getDoctrine()->getManager();

    foreach($addedUsers as $row) {
        // check for existing users

        $emailAddress = $row["Email Address"];
        $user = $this->get('manager_user.repository')->findByEmailAddressWithoutParents($emailAddress);

        if ($user === []) {
            //  create new user
            $userTypeId = 1;
            $role = $request->get('roles', []);
            $firstname = $row["First Name"];
            $surname = $row["Last Name"];
            $email = $row["Email Address"];
            $username = (strtolower($row["First Name"].".".$row["Last Name"]));
            $phone = null;

            $userBuilder = $this->get('manager_user.manager')->newUser(        
                $userTypeId,
                $username,
                $phone,
                $email,
                $role,
                $password = null,
                $organisation = null,
                $emailResetPasswordLink = 0,
                $firstname,
                $surname,
                $name = null,
                $roles = []
            );



            $user = $userBuilder;

            // add email to contact_methods
            $cmType = $this->get('manager_user_contact_method_type.repository')->find(ContactMethodTypeInterface::EMAIL);
            $cmEmail = $this->get('manager_user_contact_method.builder')->createNew($cmType, $row["Email Address"], $user, 1);

            $em->persist($userBuilder);
            $em->persist($cmEmail);
        }       

            $em->flush();         
    }

    // return to user list page with list updated from .csv users

    $listId = $request->get('listId');
    $list = $this->get('manager.email.list_repository')->find($listId);
    $status = 1;
    //loop over the added users
    foreach($addedUsers as $row) {
        $userNameLower = (strtolower($row["First Name"].".".$row["Last Name"]));
        $userId = strval($this->get('manager_user.repository')->getUserIdByUserName($userNameLower));


        $user = $this->get('manager_user.repository')->find($userId);

        if(!$user->isInList($list)) { //this user is not in the list already so add it
            $dateSubscribed = new \DateTime();
            $emailCampaignListUser = new EmailCampaignListUser($user, $list, $dateSubscribed, $status);

            $em->persist($emailCampaignListUser);
        }
    }

    $em->flush();


   return $this->redirectToRoute('manager_email_campaign_lists_users_upload_check', array('listId' => 1));  
}

有什么办法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

找到位置后,您需要停止更新位置。重新加载manager.stopUpdatingLocation()

后添加此tableView
extension RestaurantsViewController: CLLocationManagerDelegate {
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        if (locations.count > 0) {
            if (location?.coordinate.longitude != locations[0].coordinate.longitude && location?.coordinate.latitude != locations[0].coordinate.latitude) {
                location = locations[0]
                print("will reload table")
                self.tableView.reloadData()
                manager.stopUpdatingLocation()
            }
        }
    }
}