W moim pliku nagłówkowym utworzyłem wyliczenie, które wygląda tak
typedef enum {stTMD = 1, stT2MD = 2, stDCMD = "D", stMBMD = "M"} stTypes;
Po pierwsze, nie jestem nawet pewien, czy to prawdasposób zadeklarować char w enum, ale Jak widać, niektóre wartości są liczbami całkowitymi, a inne są znakami. Jednak pojawia się następujący błąd, gdy próbuję umieścić te wartości w NSDicitonary w ten sposób
NSDictionary *iCTypes = [[NSDictionary alloc] initWithObjectsAndKeys:stDCMD,@"stMB", stMBMD,@"stMBMD", nil];
ale poniżej pojawia się ten błąd
Implicit conversion of "int" to "id" is disallowed with ARC
jakakolwiek pomoc byłaby bardzo doceniana.
Odpowiedzi:
1 dla odpowiedzi № 1Na enum
jest w zasadzie int
rodzaj. Twój enum
definicja jest w porządku. Problemem jest twoje użycie w słowniku. Musisz owinąć enum
wartości w NSNumber
.
Próbować:
NSDictionary *iCTypes = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithInt:stDCMD], @"stMB", [NSNumber numberWithInt:stMBMD] ,@"stMBMD", nil];
lub nawet lepiej (używając nowoczesnego Objective-C):
NSDictionary *icTypes = @{ @(stDCMD) : @"stMB", @(stMBMD) : @"stMBMD" };
1 dla odpowiedzi nr 2
Musisz przechowywać w nim obiekty, więc nie możesz przechowywać pliku intraczej a NSNumber, co można zrobić, dołączając plik @ przed stałą liczbową:
NSDictionary *iCTypes = [[NSDictionary alloc] initWithObjectsAndKeys: @(stDCMD),@"stMB", @(stMBMD),@"stMBMD", nil];
Jednak potrzebne jest wyjaśnienie w tej sprawie:
Po pierwsze, nie jestem nawet pewien, czy to właściwy sposób deklarowania znaku w wyliczeniu, ale jak widać, niektóre wartości są liczbami całkowitymi, a inne znakami.
Kiedy definiujesz wyliczenie, przechowuje on liczby całkowite, nie ma znaczenia, czy ustawisz znaki jako wartości, są one zgodne z int więc kompilator nie będzie narzekał. Ale typ pamięci jest taki sam, nadal są to liczby całkowite i każdy typ zgodny z liczbami całkowitymi będzie akceptowany.
0 dla odpowiedzi № 3
Zarówno obiekty, jak i klucze w NSDictionary musząbyć obiektami, a klucze w szczególności muszą być obiektami zgodnymi z NSCopying. Aby użyć liczb int w NSDictionary, musisz przekonwertować je na NSNumbers. Możesz użyć jednego z nich [NSNumber numberWithInt:stDCMD]
lub jeśli używasz nowszej wersji Xcode, @(stDCMD)
.
0 dla odpowiedzi nr 4
W C char jest rodzajem short int. enum może przechowywać tylko typy całkowite. NSDictionary nie może przechowywać typów C. Tylko przedmioty. Możesz opakować swoje typy C w NSValue lub NSNumber, aby umieścić je w NSDictionary.