title: Why does only NSLog warn me about using the %lu string format specifier for NSUInteger?
body: <p>For some reason, I get a compilation error when I try to do the following:</p>
  
  <pre><code>NSLog(@"row: %lu", indexPath.row);
  </code></pre>
  
  <p>where <code>row</code> is of type <code>NSUInteger</code>. The error I get is</p>
  
  <blockquote>
    <p>Conversion specifies type 'unsigned long' but the argument has type 'NSUInteger' (aka 'unsigned int')</p>
  </blockquote>
  
  <p>I can do the following with no compilation errors:</p>
  
  <pre><code>NSString * string = [NSString stringWithFormat:@"row: %lu", indexPath.row];
  </code></pre>
  
  <p>I'm using the exact same format string and substitution argument in both cases, but why does <code>NSLog</code> freak out while <code>-stringWithFormat:</code> seems to be perfectly content? My compiler is LLVM 1.6.</p>