Re: iOS - Proper way to check UIEvent or UInternalEvent

2015-06-23 Thread Kyle Sluder
 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

2015-06-23 Thread Alex Zavatone

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

2015-06-23 Thread Kyle Sluder
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

2015-06-23 Thread Alex Zavatone

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

2015-06-23 Thread Alex Zavatone
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

2015-06-23 Thread Kyle Sluder
 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

2015-06-23 Thread Kyle Sluder
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