0

Objective-C の学習を始めたばかりで、乱数を使用してその数値のキーの値を取得しようとしています。

NSNumber と NSUInteger のデータ型が異なるため、明らかに (ほとんどの場合) これはコンパイルされません。しかし、これは私のベストショットでしたが、コンパイラは次のエラーを出します:

ARC では、Objective-C 以外のポインター型「NSUInteger *」(別名「unsigned int *」) から「id」への暗黙的な変換は許可されていません。

このおそらく些細な(多くの人にとって)問題に私を案内してくれる人はいますか?

これは私の試みです:

NSDictionary *refDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:
                                    @"one", [NSNumber numberWithInteger:0],
                                    @"two", [NSNumber numberWithInteger:1],
                                    @"one", [NSNumber numberWithInteger:2],
                                    @"two", [NSNumber numberWithInteger:3],
                                    @"four",[NSNumber numberWithInteger:4],
                                    @"six", [NSNumber numberWithInteger:5], nil];


        NSUInteger *dieIndex = arc4random_uniform(6);

        NSString *imageName = [refDictionary objectForKey:dieIndex];
4

2 に答える 2

2

以下を使用できます。

[NSNumber numberWithUnsignedInteger :dieIndex]

 NSString *imageName = [refDictionary objectForKey: [NSNumber  numberWithUnsignedInteger:dieIndex]  ];
于 2014-02-20T23:37:25.570 に答える
0

2 つの問題:

  1. あなたはそうしなかっ#import <stdlib.h>たので、コンパイラは関数を見つける場所を知りません。arc4random_uniform()さらに悪いことに、コードはその関数の署名が間違っていることを暗示しています。u_int32_tではなく、を返しますNSUInteger*

  2. NSNumber同じ構文を使用して、既に使用方法を知っている数値に変換する必要があります。

    int dieIndex = arc4random_uniform(6);
    
    NSString *imageName = [refDictionary objectForKey:[NSNumber numberWithInteger:dieIndex]];
    

コードを読みやすくしたい (そして古いバージョンの iOS に移植できないようにしたい) 場合は、新しいスタイルの構文を使用することもできます。

    NSString *imageName = refDictionary[@(dieIndex)];
于 2014-02-20T23:37:58.380 に答える