Ausgabe
Warnung 1:
Ich folge einem Tutorial zum Erstellen einer App und muss srandom(time(NULL)) verwenden. Ich habe im Internet nachgesehen und festgestellt, dass arc4random dieses Problem möglicherweise lösen kann, aber es gibt nicht genügend Informationen, um herauszufinden, wie. Die Warnung zeigt –
‘implizite Konvertierung verliert ganzzahlige Genauigkeit: ‘time_t’ (auch bekannt als ‘long’) zu ‘unsigned int’
Hier ist mein Code, in dem ich srandom verwendet habe.
- (void) shuffle {
NSMutableArray *validMoves = [[NSMutableArray alloc] init];
srandom(time(NULL)); // warning is here
for( int i=0; i<SHUFFLE_NUMBER; i++){
[validMoves removeAllObjects];
Warnung 2
Die Warnung sagt mir: ‘Werte vom Typ “NSInteger” sollten nicht als Formatargumente verwendet werden; fügen Sie stattdessen eine explizite Umwandlung zu “long” hinzu.’
Könnte ich wissen, ob es eine Möglichkeit gibt, diese Warnung zu beheben … oder muss ich unbedingt %d %ld mit ‘long’ machen?
if ([prefs boolForKey:@"Refresh"] == TRUE) {
countmove = 0;
thetime = 0;
if (timer != nil) {
[timer invalidate];
timer = nil;
}
NSString *Pic = [NSString stringWithFormat:@"image%d.png", [prefs integerForKey:@"PuzzlePicture"]];
[self initPuzzle:Pic];
Lösung
Der Compiler kann diese Formatänderungen für Sie vornehmen, es gibt also keinen Grund, sie nicht vorzunehmen.
Denken Sie daran, dass der zugrunde liegende Typ von NSInteger und NSUInteger auf 32-Bit- und 64-Bit-Prozessoren (absichtlich) unterschiedlich ist, sodass Sie kein Format haben können, das korrekt funktioniert, um einen NSInteger sowohl auf 32- als auch auf 64-Bit zu drucken (außer Sie können versuchen, z which ist für size_t vorgesehen).
Beantwortet von – gnasher729
Antwort geprüft von – Senaida (FixError Volunteer)