2016-11-29 6 views
0

ich diesen Code verwenden NSCalenderUnitWie Implizite Konvertierung beheben verliert integer Präzision Warnung

- (void)encodeWithCoder:(NSCoder*)encoder { 
    [super encodeWithCoder:encoder]; 

    NSNumber *boxed = [NSNumber numberWithUnsignedLong:self.myNSCalendarUnit]; 
    [encoder encodeObject:boxed forKey:@"myNSCalendarUnit"]; 
    // ... 

} 

- (id)initWithCoder:(NSCoder*)aDecoder { 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     NSNumber *boxed = [aDecoder decodeObjectForKey:@"myNSCalendarUnit"]; 
     _myNSCalendarUnit = [boxed unsignedLongLongValue]; 
     // ... 
    } 
    return self; 
} 

Aber ich bin immer diese Warnung

Implizite Konvertierung integer Präzision zu kodieren und dekodieren verliert: ‚unsigned long lang‘zu 'NSCalendarUnit' (auch bekannt als 'enum NSCalendarUnit')

Wie Code korrigieren diese entfernen Warnung?

Antwort

0

Wie Sie die Beschreibung Art von NSCalendarUnit sehen

typedef NS_OPTIONS(NSUInteger, NSCalendarUnit) 

sollten Sie zu _myNSCalendarUnit = [boxed unsignedIntegerValue] ändern für Typ übereinstimmen. Die long long ist durch 64-Bit definiert, aber NSUInteger ist nicht (reference). Und wenn create boxed, sollten Sie mit dem gleichen Datentyp NSNumber *boxed = [NSNumber numberWithUnsignedInteger:self.myNSCalendarUnit];

+0

verwenden, aber ich habe numberWithUnsignedLong in NSNumber konvertieren ... wird die Konvertierung in unsignedIntegerValue auswirken können? –

+0

Die am besten geeignete Methode ist, [NSNummer numberWithUnsignedInteger: self.myNSCalendarUnit]; 'mit dem ursprünglichen NSCalendar-Typ (NSUInteger) zu erstellen. Es sollte keine Daten von irgendeinem Fall verlieren. Außerdem, in Ihrem aktuellen Code, erstellen Sie mit 'unsignedLong', aber mit' unsignedLongLong', es ist nicht approciate. – nynohu

Verwandte Themen