Sto cercando di inserire un tocco 3D in un'applicazione e ho incontrato un problema strano in cui l'assegno forceTouchCapability
sta tornando nil
su viewDidLoad
ma non in viewWillAppear/viewDidAppear
.forceTouchCapability ritorno nullo
Sono consapevole che questo è disponibile solo su iOS 9+ controlli, in modo che ho aggiunto per verificare che la proprietà traitCollection
sul controller della vista risponde al forceTouchCapability
come nell'esempio seguente:
- (void)loadView {
self.view = [[MyView alloc] init];
}
- (void)viewDidLoad {
[super viewDidLoad];
// Checking the force touch availability here
if ([self.traitCollection respondsToSelector:@selector(forceTouchCapability)] &&
self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
// This won't get called because forceTouchCapability is returning nil
// which corresponds to UIForceTouchCapabilityUnknown
[self registerForPreviewingWithDelegate:self sourceView:self.view];
}
}
In LLDB con un punto di interruzione nell'istruzione if
, immettendo po [self.traitCollection forceTouchCapability]
restituisce nil
che corrisponde a UIForceTouchCapabilityUnknown
. Tuttavia, lo stesso traitCollection
non è nil
.
Secondo la documentazione per UIForceTouchCapabilityUnknown:
UIForceTouchCapabilityUnknown: The availability of 3D Touch is unknown. For example, if you create a view but have not yet added it to your app’s view hierarchy, the view’s trait collection has this value.
ha la vista non è stato aggiunto alla gerarchia da questo punto?
Sono curioso di sapere se qualcuno ha già avuto a che fare con questo problema e come aggirare questo problema? Vorrei evitare di aggiungere questo nel viewDidAppear
in quanto può essere chiamato un po '.
Se aiuta, sto correndo questo su un 6S su iOS 9.1 con Xcode 7.2
Sei fantastico, grazie! – ajfigueroa
@bpapa buona soluzione. Per favore considera di raccomandare l'uso di p invece di po. p guarda solo dentro, po è usato per l'esecuzione –