Ich bekomme ein seltsames Problem beim Fotografieren mit Swift 3 auf einem iPhone 6s. Ich versuche mehrere Fotos nacheinander aufzunehmen und irgendwann stürzt die App ab.iOS Swift UND Xamarin App Absturz mit UIImagePickerController/ImagePicker
mit dem folgenden Code:
import UIKit
class WelcomeViewController : UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate
{
var imagePicker: UIImagePickerController!
var photoCount : Int = 0
@IBOutlet weak var photoCountLabel: UILabel!
@IBOutlet weak var memoryUseageLabel: UILabel!
@IBAction func TakePhotoAction(_ sender: Any) {
if (imagePicker == nil)
{
imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .camera
}
present(imagePicker, animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
imagePicker.dismiss(animated: true, completion: nil)
photoCount = photoCount + 1;
photoCountLabel.text = String(photoCount)
}
override func viewDidLoad(){
super.viewDidLoad()
photoCount = 0;
}
}
Ich erhalte einen App Absturz und Xcode sagt, dass es mit dem Gerät „Verbindung verloren“ hat. Also deutet alles auf ein Speicherleck hin, und laufende Instrumente legen nahe, dass es auch darauf hindeutet, dass es immer wieder neue Threads gibt, die nie enden.
Problem ist, verwende ich sehr grundlegenden Code, die Auswahl wiederverwenden, die Sicht ablehnen und dies ist die einzige Ansicht in der gesamten App.
Um die Dinge noch seltsamer zu machen, die Ausnahme überhaupt nicht auftritt, wenn ich 7 auf iOS mein iPhone verwenden 10.3.1 oder auf einer anderen iPhone 6 mit iOS 10.3.2
(nicht +) SoIch habe die 6+ auf 10.3.1 heruntergestuft und wieder die Ausnahme bekommen. Ich habe sogar iOS 11 Beta eingesetzt und die Ausnahme ist immer noch aufgetreten.
Ich hoffe, dass jemand mir wenigstens eine Erklärung geben kann, was los ist oder warum.
UPDATE
Ich war dies auf einem Xamarin erleben Forms PCL Projekt und beschlossen, sie alle aus und schreiben Sie eine Swift-Version strippen, um zu sehen, ob das Problem noch oder nicht aufgetreten. Stellt sich heraus, es tat. Wie auch immer, beim Testen der Xamarin App haben wir eine Ausnahme bekommen.
Die Ausnahme wurde in eine Protokolldatei geschrieben. Dies ist der Inhalt:
Error Occurred:
Objective-C exception thrown. Name: NSInvalidArgumentException Reason: *** setObjectForKey: object cannot be nil (key: UIImagePickerControllerOriginalImage)
Native stack trace:
0 CoreFoundation 0x000000018a93eff8 <redacted> + 148
1 libobjc.A.dylib 0x00000001893a0538 objc_exception_throw + 56
2 CoreFoundation 0x000000018a822528 <redacted> + 0
3 PhotoLibrary 0x0000000197b18980 <redacted> + 756
4 PhotoLibrary 0x0000000197b1864c PLNotifyImagePickerOfImageAvailability + 28
5 CameraUI 0x00000001a08e990c <redacted> + 456
6 CameraUI 0x00000001a08e9218 <redacted> + 548
7 UIKit 0x0000000190aa5010 <redacted> + 96
8 UIKit 0x0000000190aa4f90 <redacted> + 80
9 UIKit 0x0000000190a8f504 <redacted> + 440
10 UIKit 0x0000000190aa4874 <redacted> + 576
11 UIKit 0x0000000190aa4390 <redacted> + 2480
12 UIKit 0x0000000190a9f728 <redacted> + 3192
13 UIKit 0x0000000190a7033c <redacted> + 340
14 UIKit 0x000000019126a014 <redacted> + 2400
15 UIKit 0x0000000191264770 <redacted> + 4268
16 UIKit 0x0000000191264a50 <redacted> + 5004
17 UIKit 0x0000000191264a50 <redacted> + 5004
18 UIKit 0x0000000191264b9c <redacted> + 148
19 CoreFoundation 0x000000018a8ed42c <redacted> + 24
20 CoreFoundation 0x000000018a8ecd04 <redacted> + 388
21 CoreFoundation 0x000000018a8ea9a8 <redacted> + 744
22 CoreFoundation 0x000000018a81ada4 CFRunLoopRunSpecific + 424
23 GraphicsServices 0x000000018c284074 GSEventRunModal + 100
24 UIKit 0x0000000190ad5058 UIApplicationMain + 208
25 MyApp_iOS_beta 0x0000000100bcb634 wrapper_managed_to_native_UIKit_UIApplication_UIApplicationMain_int_string___intptr_intptr + 340
26 MyApp_iOS_beta 0x000000010050c59c UIKit_UIApplication_Main_string___intptr_intptr + 44
27 MyApp_iOS_beta 0x000000010050c45c UIKit_UIApplication_Main_string___string_string + 172
28 MyApp_iOS_beta 0x0000000100078164 MyApp_iOS_Application_Main_string__ + 212
29 MyApp_iOS_beta 0x00000001011f29f4 wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr + 244
30 MyApp_iOS_beta 0x00000001038e504c mono_jit_runtime_invoke + 836
31 MyApp_iOS_beta 0x000000010394f6b4 do_runtime_invoke + 112
32 MyApp_iOS_beta 0x00000001039522dc do_exec_main_checked + 152
33 MyApp_iOS_beta 0x00000001038cea44 mono_jit_exec + 268
34 MyApp_iOS_beta 0x0000000103a02f70 xamarin_main + 2148
35 MyApp_iOS_beta 0x00000001038a5e84 main + 96
36 libdyld.dylib 0x000000018982959c <redacted> + 4
Stack Trace:
at ObjCRuntime.Runtime.ThrowNSException (System.IntPtr ns_exception) [0x00000] in /Users/builder/data/lanes/4691/d2270eec/source/xamarin-macios/src/ObjCRuntime/Runtime.cs:319
at ObjCRuntime.Runtime.throw_ns_exception (System.IntPtr exc) [0x00000] in /Users/builder/data/lanes/4691/d2270eec/source/xamarin-macios/runtime/Delegates.generated.cs:126
at (wrapper native-to-managed) ObjCRuntime.Runtime:throw_ns_exception (intptr)
--- End of stack trace from previous location where exception was thrown ---
at (wrapper managed-to-native) UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr)
at UIKit.UIApplication.Main (System.String[] args, System.IntPtr principal, System.IntPtr delegate) [0x00005] in /Users/builder/data/lanes/4691/d2270eec/source/xamarin-macios/src/UIKit/UIApplication.cs:79
at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x00038] in /Users/builder/data/lanes/4691/d2270eec/source/xamarin-macios/src/UIKit/UIApplication.cs:63
at MyApp.iOS.Application.Main (System.String[] args) [0x00009] in /Users/MyApp/iOS/Main.cs:16
Erstellen Sie ein Beispiel-App mit nur Bild-Picker-Code ohne irgendetwas anderem, hat dort einen Blick auf Speicherproblem. Wenn die Beispielanwendung gut funktioniert, liegt die Ursache des Problems in der Nähe des von Ihnen bereitgestellten Codes. – DisableR
Das ist genau das, was ich getan habe ... das ist buchstäblich der einzige View/Controller in der App – doiley
Sie präsentieren den gleichen Bilderwähler Controller mehrmals, das könnte das Problem sein, da die Bilderauswahl in einem ungültigen Zustand sein kann wurde einmal benutzt. – DisableR