2012-04-13 37 views
7

Ngay khi tôi cài đặt và khởi chạy ứng dụng của mình lần đầu tiên, ứng dụng này ngay lập tức yêu cầu dịch vụ vị trí, mặc dù startUpdatingLocation chưa được gọi. Tôi thậm chí không phân bổ một cá thể CLLocationManager tại thời điểm đó. Tôi muốn lời nhắc này được thực hiện một cách uể oải sau khi tôi thực sự thực hiện cuộc gọi để người dùng không tắt nó một cách mù quáng. Gần đây, luồng này có thay đổi với iOS không? Tôi nhớ nó thường được hỏi một cách uể oải. Tôi đang sử dụng phần vững 5.1.Rất nhanh chóng yêu cầu Dịch vụ vị trí

+0

Bạn đang nói về hộp thoại đó (ứng dụng *** muốn sử dụng ...) hiển thị lần đầu tiên người dùng khởi chạy ứng dụng của bạn? –

+0

Có thực sự, vì lý do nào đó trong 5.1. – ssteinberg

+0

@rokjarc Vâng đó là một. –

Trả lời

5

Thats thú vị. Tôi đã thử nghiệm giả thuyết của bạn, rằng người quản lý vị trí thậm chí không được phân bổ và cuộc hội thoại Quyền đối với vị trí trên iOS xuất hiện. Tôi đã thử khắc phục sự cố sau. Sau mỗi bước tôi chạy dự án trên một thiết bị và tôi chỉ có thể nhận được popup vị trí xuất hiện ở bước cuối cùng.

  • Bắt đầu một ứng dụng mới
  • yêu cầu vị trí-dịch vụ trong info.plist
  • yêu cầu gps trong info.plist
  • liên kết CoreLocation cho dự án
  • nhập Lõi Location vào tiêu đề
  • Make và tổng hợp thuộc tính cho người quản lý vị trí
  • yêu cầu CLLocationQuản lý cho + ủy quyềnStatus
  • yêu cầu CLLocationQuản lý cho + locationServicesEnabled
  • cấp phát init a CLLocationThông tin người quản lý
  • cho CLLocationQuản lý bắt đầu cập nhật vị trí.

Chỉ bước cuối cùng mới đưa ra lời nhắc. Để chắc chắn tôi thậm chí đã tạo ra một viewController đã đẩy một bộ điều khiển xem thứ hai mà khởi tạo một CLLocationManager và bắt đầu cập nhật vị trí. Cửa sổ bật lên quyền chỉ xuất hiện khi bộ điều khiển chế độ xem thứ hai được đẩy. Đây là tất cả với Xcode mới nhất chạy trên 5.1.

Tôi đã cho thấy rằng dịch vụ vị trí vẫn chỉ yêu cầu quyền vào đúng thời điểm bạn thử và bật vị trí như đã thực hiện trong các SDK trước đó. Có lẽ kiểm tra mã của bạn, có thể dán một số ở đây để chúng tôi có thể đi vào chi tiết hơn. :)

+0

Tôi cũng sẽ thử điều này để đảm bảo. Tất cả các xử lý vị trí của tôi được thực hiện thông qua một singleton, vì vậy tôi chỉ có một cuộc gọi để startUpdatingLocation trong toàn bộ ứng dụng của tôi. Tôi có một breakpoint trên nó và nó không bao giờ được gọi. Khả năng duy nhất tôi có thể nghĩ là một trong những khung phụ thuộc, vì lý do gì đó, đang kích hoạt điều này. Dự án của tôi là lớn, do đó, nó sẽ là một * đau * để tái tạo các tập tin dự án. Ngoài ra tôi đã sử dụng và nâng cấp tệp dự án từ iOS 3.0. –

+1

Bạn có sử dụng mạng quảng cáo hoặc khung từ xa không? Đi đến thanh bên của điểm ngắt, nhấp vào dấu cộng ở dưới cùng và trong loại Hộp biểu tượng '- [CLLocationManager startUpdatingLocation]' và nó sẽ bị ngắt cho startUpdatingLocation trên toàn bộ dự án và thư viện của bạn. Cũng có thể đáng để nghe '–startMonitoringSignificantLocationChanges' – jackslash

+0

Cảm ơn bạn vì điều này, đó là một mẹo hay để biết! Đó là bởi vì tôi đã được phân bổ (không hiển thị) một MKMapView trong nền khi khởi động để hiển thị sau này. –

Các vấn đề liên quan