2017-09-29 11 views
23

Tôi đang viết lại ứng dụng liệu pháp vật lý iOS hiện có (nhanh) trên Xamarin .Các hình thức. Đó là một ứng dụng hẹn giờ để giúp những người bị tổn thương dây thần kinh (như tôi!) Thực hiện các bài tập khinh miệt của họ. Bạn có các "loại vải" này (ví dụ: lông), trong đó mỗi loại vải có đếm ngược thứ hai 'x'. Khi bộ đếm thời gian của vải đạt 0, một hộp thông báo xuất hiện nói "hết thời gian". Người dùng nhấn OK và vải tiếp theo bắt đầu đếm ngược. Rửa sạch và lặp lại cho tất cả các loại vải trong danh sách. Đây là video showing the workflow. Tôi tin tưởng vào UX trong video.Trong thiết bị Xamarin.Forms.BeginInvokeOnMainThread() không hiển thị hộp tin nhắn từ thông báo gọi lại * chỉ * trong Cấu hình phát hành trên thiết bị vật lý

Đây là số sample app code demonstrating this behavior của tôi.

Phương pháp DoSomethingForNow (tha thứ cho chiến lược đặt tên) là gọi lại từ NotificationService (xem dòng 65 - không đủ điểm đại diện cho liên kết trực tiếp) được tạo khi bộ hẹn giờ bắt đầu, trong trường hợp ứng dụng được tải xuống.

Cuộc gọi cụ thể không hoạt động trên chế độ Release trên thiết bị là tại dòng 115

Device.BeginInvokeOnMainThread(
       async() => await ShowAlertAndWaitForUser(currentFabricCount)); 

Các async() => await ShowAlertAndWaitForUser(currentFabricCount)) công trình như mong đợi trong Debug và Release cấu hình trên iOS Simulator, và trong cấu hình gỡ lỗi trên thiết bị.

Tuy nhiên, hộp thông báo cho biết thời gian là không xuất hiện trong Cấu hình phát hành trên thiết bị vật lý. Tôi không thể tìm ra lý do tại sao Device.BeginInvokeOnMainThread() không hoạt động trong Cấu hình bản phát hành trên thiết bị. Chuyện gì vậy?

Side lưu ý tái sử dụngDevice.StartTimer()

Lý do tại sao tôi chuyển từDevice.StartTimer()đến giải pháp FrenchPressTimer James (xem jamesmontemagno/FrenchPressTimer) từ rất sớm là vì tôi cần một cách để hủy/dừng/bất cứ điều gì làDevice.StartTimer()trong trường hợp người dùng cần tạm dừng hoặc dừng đếm ngược trên ứng dụng.

Device.StartTimer()hoạt động tuyệt vời đối với tôi trên tất cả các cấu hình trên cả hai mô phỏng và thiết bị và may mắn có người chỉ cho tôi làm thế nào để hủy bỏ một Device.StartTimer (nhờ!). Nếu bạn muốn xem giải pháp làm việc này, hãy xem saraford/Device-StartTimer-Working-Xamarin trên github.

Câu hỏi cụ thể của tôi là tại sao không Device.BeginInvokeOnMainThread() hiển thị hộp thư khi được gọi từ cuộc gọi lại thông báo trong Cấu hình phát hành trên thiết bị thực.

Tôi cũng đã thử các kết hợp liên kết khác nhau. Không có hiệu lực.

+0

Các bạn đã thử các nền tảng khác như Android? –

+0

Bạn có thể thêm ghi nhật ký vào 'DoSomethingForNow()' không? Giống như trong nhánh IF/Else.Một tuyên bố trong mỗi. – spottedmahn

+0

Tôi đã cung cấp cho họ cả một spin trên Xamarin mới nhất (2.4.0.282) và iOS (11.0.1). Đã phát hành bản dựng lên iPhone 6 vật lý, tôi không thấy sự khác biệt giữa hành vi ứng dụng, ngoại trừ siêu liên kết hủy trong phiên bản đang hoạt động. – KnarfaLingus

Trả lời

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