• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Converting from scalar to NSNumber*
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Converting from scalar to NSNumber*


  • Subject: Re: Converting from scalar to NSNumber*
  • From: Greg Parker <email@hidden>
  • Date: Fri, 27 Feb 2015 16:45:12 -0800

> On Feb 27, 2015, at 4:28 PM, Rick Mann <email@hidden> wrote:
>
> I'm updating some older Core Data code in which I made liberal use of transient properties to map NSNumber* types to scalar types like uint32_t. In practice, this doesn't gain much, especially with boxing syntax, and it makes the Core Data classes messier (shadow attributes, etc.).
>
> The problem is, if I change an attribute's type to NSNumber*, and fail to modify every reference to that attribute, I often end up comparing pointers, not values:
>
>    @property (strong) NSNumber*		someAttribute;
>
>    if (obj.someAttribute > 42)
>
> which needs to become:
>
>    if (obj.someAttribute.integerValue > 42)
>
> I'd love an explicit warning for misuse of NSNumber*, but a pointer-integer comparison warning would be helpful. However, I don't see that among the available warnings in Xcode.

Here's how to answer "is there a warning for X".
1. Write a test file with the line of code that you want to be warned about.
2. Compile that file with -Weverything which enables literally every warning supported by the compiler.
3. If the compiler warns about the code then the diagnostic message will print the name of the warning flag, if any. Example:
    test.m:13:1: warning: control reaches end of non-void function [-Wreturn-type]
If it doesn't print a warning name then that warning is on all the time, I think.

When I run a test of your code, I get a warning unconditionally. It's possible that my compiler is newer than yours; in your compiler there might be no warning, or there might be a warning behind some warning flag. Try it yourself.

test.m:12:13: warning: ordered comparison between pointer and integer
      ('NSNumber *' and 'int')
    if (t.x > 42) printf("bigger");
        ~~~ ^ ~~


--
Greg Parker     email@hidden     Runtime Wrangler



_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:

This email sent to email@hidden


  • Follow-Ups:
    • Re: Converting from scalar to NSNumber*
      • From: Rick Mann <email@hidden>
References: 
 >Converting from scalar to NSNumber* (From: Rick Mann <email@hidden>)

  • Prev by Date: Re: CGFloat and NS_BUILD_32_LIKE_64
  • Next by Date: Re: Converting from scalar to NSNumber*
  • Previous by thread: Converting from scalar to NSNumber*
  • Next by thread: Re: Converting from scalar to NSNumber*
  • Index(es):
    • Date
    • Thread