1. ホーム

[Objective-C] NSArray initWithObjects "Expression result unused" 警告

2022-03-16 15:06:17

参考にしてください。

http://stackoverflow.com/questions/7914990/xcode-4-warning-expression-result-unused-for-nsurlconnection

https://developer.apple.com/library/prerelease/ios/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/index.html#// apple_ref/occ/instm/NSArray/initWithObjects:







[質問】です。]





ViewController.h

@interface ViewController: UIViewController

@property NSArray* arr;

@end





ViewController.m

#import "ViewController.h"

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  [self.arr initWithObjects: @"1", @"2", @"3", nil];
}
...
@end





ViewController.m の [self.arr initWithObjects: ...] の行で、XCode は警告を表示します。ViewController.m内の[Expression result unused]の行で、XCodeは警告を表示します。Expression result unused.





[理由】です。]





NSArray initWithObjects]の戻り値は、引数のリストで初期化されたNSArrayです; もしそれが無視されたら、XCodeは警告を報告します。 : 式結果未使用





[解決済み】です。]





NSArray iniWithObjects] 行の先頭で void への型変換を強制して警告を抑制する : は、その

#import "ViewController.h"

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  (void)[self.arr initWithObjects: @"1", @"2", @"3", nil]; // Add "(void)" ahead
}
...
@end





[注】をご覧ください。]





実は、ここでは変数arrの使い方が間違っています。arrはどこにもallocしていないのです。

ですから、正しいのは

[self.arr initWithObjects: @"1", @"2", @"3", nil];

に変更します。

arr = [[NSArray alloc] initWithObjects: @"1", @"2", @"3", nil];