1

verwenden Ich habe viele Beiträge über NULL-Fähigkeit gelesen, aber ich kann nicht für das Leben von mir machen meine Warnungen weggehen. Hier sind ein paar Beispiele:Genau wie nonnull in bestimmten Fällen in Objective C

playPause = @[[UIImage imageNamed:@"Play"], [UIImage imageNamed: @"Pause"]]; 
[imagePropertiesFileHandle writeData:[header dataUsingEncoding:NSUTF8StringEncoding]]; 

Jeder von diesen wird diese Warnung: „implizite Konvertierung von Nullable-Zeiger‚NSData * _Nullable‘auf NULL-Zeiger-Typ‚NDSata * _Nonnull‘

Rund um den Code mit NS_ASSUME_NONNULL_BEGIN/Ende entweder nicht funktioniert.

ich eine Vielzahl von Kombinationen von (ungleich NULL) __nonnull versucht habe, etc. und kann nicht scheinen, die magische Lage von Keywords zu finden, um die Warnung weggehen.

+0

Was 'header' ist? Von dem Aussehen her, liefert "dataUsingEncoding:" ein NSLData-Objekt, das NULL-fähig ist, während "imagePropertiesFileHandle" einen "NULL" -Zeiger erwartet. – JAL

Antwort

2

Das Problem ist das Die Methode NSString dataUsingEncoding: kann nil zurückgeben. Aber der NSFileHandle writeData: akzeptiert keinen nil Parameter.

Split diese Linie:

[imagePropertiesFileHandle writeData:[header dataUsingEncoding:NSUTF8StringEncoding]]; 

In diese:

NSData *data = [header dataUsingEncoding:NSUTF8StringEncoding]; 
if (data) { 
    [imagePropertiesFileHandle writeData:data]; 
} 
+0

Perfekt, danke. Ich bekomme es jetzt und ich sehe, wie das auf mein anderes Beispiel zutrifft. – user938797