Re: iOS - Proper way to check UIEvent or UInternalEvent
On Jun 23, 2015, at 7:31 PM, Alex Zavatone z...@mac.com wrote: On Jun 23, 2015, at 9:27 PM, Kyle Sluder wrote: On Jun 23, 2015, at 6:10 PM, Alex Zavatone z...@mac.com wrote: Actually, the rotate event is the one that is being caught and sent. If it's a UIEvent and it's listed as a UIInternalEvent, within the debugger, how do I check the type and subtype to see what type of event it is so that I can return immediately if it is the wrong type? I don’t understand the question. Or rather, I understand the question, but I don’t understand why you are asking it. Because an exception is thrown in that case and I'd prefer to return before my app quits. It’s your code that’s throwing the exception, right? Or are you saying that UIKit is throwing an exception if you ask for the .type of a UIEvent that it hands you, if that object just so happens to be an instance of a private subclass? There are three public types of event: Touches, Motion, and RemoteControl. Are you saying that UIInternalEvents are re-using one of these constants, and therefore you need an alternative way to disambiguate them? That’s definitely a problem and you should file a Radar. I'm saying I want to see which event it is and return if it is a motion event. Assuming the exception is being thrown by your code, stop doing that and just check the event’s .type. If it isn’t equal to Motion, skip it. If you just want to spelunk around the innards of a private UIEvent subclass, then no. We will not provide you information to do so. Barring that, just do if (event.type==UIEventTypeMotion) { } else if (event.type==UIEventTypeTouches) { } … Yeah, I tried that. The event.type is returning -1 and isn't matching any of the 3 UIEventType enum values. It's not matching on any of them. There is no guarantee that the event type will be a member of the public enum. Your code needs to be prepared for this case. A future OS might add a new event type. You don’t want your existing, shipping apps to blow up when the user upgrades their OS. --Kyle Sluder ___ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com
Re: iOS - Proper way to check UIEvent or UInternalEvent
On Jun 23, 2015, at 10:50 PM, Kyle Sluder wrote: On Jun 23, 2015, at 7:31 PM, Alex Zavatone z...@mac.com wrote: On Jun 23, 2015, at 9:27 PM, Kyle Sluder wrote: On Jun 23, 2015, at 6:10 PM, Alex Zavatone z...@mac.com wrote: Actually, the rotate event is the one that is being caught and sent. If it's a UIEvent and it's listed as a UIInternalEvent, within the debugger, how do I check the type and subtype to see what type of event it is so that I can return immediately if it is the wrong type? I don’t understand the question. Or rather, I understand the question, but I don’t understand why you are asking it. Because an exception is thrown in that case and I'd prefer to return before my app quits. It’s your code that’s throwing the exception, right? Or are you saying that UIKit is throwing an exception if you ask for the .type of a UIEvent that it hands you, if that object just so happens to be an instance of a private subclass? There are three public types of event: Touches, Motion, and RemoteControl. Are you saying that UIInternalEvents are re-using one of these constants, and therefore you need an alternative way to disambiguate them? That’s definitely a problem and you should file a Radar. I'm saying I want to see which event it is and return if it is a motion event. Assuming the exception is being thrown by your code, stop doing that and just check the event’s .type. If it isn’t equal to Motion, skip it. It's not being thrown by my own code. It's a rotate event that's being sent by the system. I did that. I'm telling you that it doesn't work. The event's type doesn't match the enums. The event's type doesn't match any enum that I know of. I'm asking how can I check this? All I can get is a -1 of type and a 0 of subtype for any event that's sent through this event catching class that I had no part in writing. I'm trying to see what type of event this is so I can exit gracefully before the app blows up on me in this special case. If you just want to spelunk around the innards of a private UIEvent subclass, then no. We will not provide you information to do so. Barring that, just do if (event.type==UIEventTypeMotion) { } else if (event.type==UIEventTypeTouches) { } … Yeah, I tried that. The event.type is returning -1 and isn't matching any of the 3 UIEventType enum values. It's not matching on any of them. There is no guarantee that the event type will be a member of the public enum. Your code needs to be prepared for this case. A future OS might add a new event type. You don’t want your existing, shipping apps to blow up when the user upgrades their OS. --Kyle Sluder Um, but I'm asking how can I prepare for this case? This is for a motion event. The OS is throwing the event. I'm not. My code is not. It's being sent when I turn the device. There is no orientation code in my viewController or nav controller. If I'm wrong and there is another thing I should be checking for besides the UIEventType enums (sorry, not in front of that computer at the moment), can you please give me a hint as to what I should check against? The app is already blowing up in one case with a UIEvent being sent to super which is UIApplication. This causes a bad access exception that I'd like to stop from bringing down my app. I have no code that's causing the event to be sent, it's being done by the system and in this class that I didn't write that catches all events, I'd like to determine which type of event this is and exit before my app explodes and dies in a fire. Do you have any suggestions how might I go about doing that? For a UIEvent that is issued by the system as a result of rotating the iOS device and is showing itself as a UIInternalEvent in the debugger, if checking for (event.type==UIEventTypeMotion) { } else if (event.type==UIEventTypeTouches) {} … fails, how can I determine the event type so I can have my app not throw an exception? The problem here is that the exception is being raised within an @try block and it is not being caught by @catch. The exception is raised on [super sendEvent:event]; only in the case of a device rotation. It's this @try { [super sentEvent:event]; } @catch (NSException *exception){ NSLog(@Exception: %@,exception); } It never gets to @catch. The stack trace tells me it's a call out from purple from a device rotation. This is why I'm trying what you suggested. As far as I can tell, this is how you are supposed to check for an event's type. How else might you suggest escape from the condition before the exception is thrown if I can't check the event's type? Thanks much. ___ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your
Re: iOS - Proper way to check UIEvent or UInternalEvent
On Tue, Jun 23, 2015, at 10:20 PM, Alex Zavatone wrote: It's not being thrown by my own code. It's a rotate event that's being sent by the system. [snip] The event's type doesn't match the enums. The event's type doesn't match any enum that I know of. Again: your app needs to be OK with this, if for no other reason than future-proofing. All I can get is a -1 of type and a 0 of subtype for any event that's sent through this event catching class that I had no part in writing. What happens if you remove this event-catching class? Does UIKit still throw an exception when you pass along the event? Are you sure that you're passing the event to an object that is expecting that event? (That is, you're not trying to pass events that should be going to UIApplication to some other object, right?) If so, this a serious issue and you should file a Radar. I cannot recommend any evasive action for you. --Kyle Sluder ___ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com
Re: iOS - Proper way to check UIEvent or UInternalEvent
On Jun 23, 2015, at 9:27 PM, Kyle Sluder wrote: On Jun 23, 2015, at 6:10 PM, Alex Zavatone z...@mac.com wrote: Actually, the rotate event is the one that is being caught and sent. If it's a UIEvent and it's listed as a UIInternalEvent, within the debugger, how do I check the type and subtype to see what type of event it is so that I can return immediately if it is the wrong type? I don’t understand the question. Or rather, I understand the question, but I don’t understand why you are asking it. Because an exception is thrown in that case and I'd prefer to return before my app quits. There are three public types of event: Touches, Motion, and RemoteControl. Are you saying that UIInternalEvents are re-using one of these constants, and therefore you need an alternative way to disambiguate them? That’s definitely a problem and you should file a Radar. I'm saying I want to see which event it is and return if it is a motion event. If you just want to spelunk around the innards of a private UIEvent subclass, then no. We will not provide you information to do so. Barring that, just do if (event.type==UIEventTypeMotion) { } else if (event.type==UIEventTypeTouches) { } … Yeah, I tried that. The event.type is returning -1 and isn't matching any of the 3 UIEventType enum values. It's not matching on any of them. I threw it in a switch/case statement and the event.type isn't matching on any of them and falls through to default:. --Kyle Sluder On Jun 23, 2015, at 7:35 PM, Kyle Sluder wrote: On Tue, Jun 23, 2015, at 02:54 PM, Alex Zavatone wrote: We don't care about motion events. We only care about touch events. I'm trying to check if the event is a of UIEventTypeMotion and simply return. If you only care about touch events, why aren't you comparing against UIEventTypeTouches? --Kyle Sluder ___ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/zav%40mac.com This email sent to z...@mac.com ___ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com
Re: iOS - Proper way to check UIEvent or UInternalEvent
Actually, the rotate event is the one that is being caught and sent. If it's a UIEvent and it's listed as a UIInternalEvent, within the debugger, how do I check the type and subtype to see what type of event it is so that I can return immediately if it is the wrong type? On Jun 23, 2015, at 7:35 PM, Kyle Sluder wrote: On Tue, Jun 23, 2015, at 02:54 PM, Alex Zavatone wrote: We don't care about motion events. We only care about touch events. I'm trying to check if the event is a of UIEventTypeMotion and simply return. If you only care about touch events, why aren't you comparing against UIEventTypeTouches? --Kyle Sluder ___ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/zav%40mac.com This email sent to z...@mac.com ___ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com
Re: iOS - Proper way to check UIEvent or UInternalEvent
On Jun 23, 2015, at 6:10 PM, Alex Zavatone z...@mac.com wrote: Actually, the rotate event is the one that is being caught and sent. If it's a UIEvent and it's listed as a UIInternalEvent, within the debugger, how do I check the type and subtype to see what type of event it is so that I can return immediately if it is the wrong type? I don’t understand the question. Or rather, I understand the question, but I don’t understand why you are asking it. There are three public types of event: Touches, Motion, and RemoteControl. Are you saying that UIInternalEvents are re-using one of these constants, and therefore you need an alternative way to disambiguate them? That’s definitely a problem and you should file a Radar. If you just want to spelunk around the innards of a private UIEvent subclass, then no. We will not provide you information to do so. Barring that, just do if (event.type==UIEventTypeMotion) { } else if (event.type==UIEventTypeTouches) { } … --Kyle Sluder On Jun 23, 2015, at 7:35 PM, Kyle Sluder wrote: On Tue, Jun 23, 2015, at 02:54 PM, Alex Zavatone wrote: We don't care about motion events. We only care about touch events. I'm trying to check if the event is a of UIEventTypeMotion and simply return. If you only care about touch events, why aren't you comparing against UIEventTypeTouches? --Kyle Sluder ___ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/zav%40mac.com This email sent to z...@mac.com ___ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com
Re: iOS - Proper way to check UIEvent or UInternalEvent
On Tue, Jun 23, 2015, at 02:54 PM, Alex Zavatone wrote: We don't care about motion events. We only care about touch events. I'm trying to check if the event is a of UIEventTypeMotion and simply return. If you only care about touch events, why aren't you comparing against UIEventTypeTouches? --Kyle Sluder ___ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com