私は数週間前に Objective-C プログラミングを始めたので、これらすべての部品がどのように組み合わされているか、およびそれらがすべて発生している順序を理解していないので、まだ混乱しています。NSURLSession を使用して、自分のアプリの 1 つに JSON API 呼び出しを行おうとしています。それはすべて問題なく機能しますが、返されたデータの一部でラベルを更新したいのですが、ラベルを見たり更新しようとすると、null になります。
私の問題に似ていることがわかったSOの投稿には、 this、this、this、およびthisが含まれます。Ruby on Rails の世界から来た私は、非同期の概念を扱う必要はまったくありませんでしたが、近いことはわかっています。
問題のコードの関連スニペットは次のとおりです。
if (!jsonError) {
NSDictionary *skillBuildData = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"%@:", skillBuildNameLabel.text); // should say "Build Name" but returns null
NSLog(@"%@", skillBuildData[@"name"]); // correctly prints the result
NSLog(@"%@:", skillBuildNameLabel.text); // should have contents of skillBuildData[@"name"] but returns null
skillBuildNameLabel.text = skillBuildData[@"name"]; // obviously results in null, but I don't know why.
});
}
編集:
関連性があるかどうかはわかりませんがViewController.h
、この非常にシンプルなアプリのアウトレットとアクションのアイデアを提供するために、私の大部分を以下に示します. 1 つのボタン、1 つのメソッド、IBOutlet
ボタンと JSON 呼び出しメソッドをリンクする 、およびラベル:
@interface ViewController : UIViewController {
IBOutlet UILabel *skillBuildNameLabel;
IBOutlet UIButton *getSkillBuildDataButton;
}
- (void)getSkillBuildDataById:(int) skillBuildId;
- (IBAction)buttonPressed;
私は非常に近くにいるようですが、見落としているリンクが表示されません。よろしくお願いします!
編集2:
回答としてマークした回答に対する Ben Kreeger のコメントを確認してください。ストーリーボードの実際のラベルを、ViewController.h
. ストーリーボードの要素から実際のコード行に線をドラッグできるとは思いもしませんでした。それが欠けていたピースでした。Xcode と Objective-C について、まだまだ学ぶことがたくさんあるようです。私を助けてくれたすべての人に感謝します!