/ / I valori iOS vengono stampati NULL all'esterno per il ciclo, ma vengono stampati bene all'interno del ciclo for - obiettivo-c, for-loop, ios6

I valori di iOS vengono stampati NULL all'esterno per il ciclo, ma vengono stampati bene all'interno del ciclo for - objective-c, for-loop, ios6

Sto pubblicando il codice che ho provato.

 .h file
--------------
@property (nonatomic,retain)  NSString *selectedChannelIDAlert;
@property (nonatomic,retain)  NSString *pNewString;

.m file
-----------
@synthesize selectedChannelIDAlert,pNewString;

-(void)callfun{
NSArray *jsonData=[NSJSONSerialization JSONObjectWithData:GETReply options:kNilOptions error:nil];
selectedChannelIDAlert=[jsonData valueForKeyPath:@"items.snippet.resourceId.channelId"];

for (pNewString in selectedChannelIDAlert) {

NSLog(@"inside:%@",pNewString);

}
NSLog(@"outside:%@",pNewString);
}

My output is
--------
2013-12-24 17:38:01.590 TubeAlert[1230:907] inside:UCK376qNDlNZZDNHsnaWuTeg
2013-12-24 17:38:01.892 TubeAlert[1230:907] inside:UC6Ju00QIPQw2mCcUSrbyQKQ
2013-12-24 17:38:02.200 TubeAlert[1230:907] inside:UCshoKvlZGZ20rVgazZp5vnQ
2013-12-24 17:38:02.750 TubeAlert[1230:907] inside:UCVzbLPpZ_VMqDzUtmN3uU9A
2013-12-24 17:38:03.429 TubeAlert[1230:907] inside:UCo0vVHI3Oz7O5zTc6f-5lgw
2013-12-24 17:38:03.735 TubeAlert[1230:907] inside:UCqg2eLFNUu3QN3dttNeOWkw
2013-12-24 17:38:04.144 TubeAlert[1230:907] inside:UCrYnLkVfvVf0Qy0YOUQdk2A
2013-12-24 17:38:04.574 TubeAlert[1230:907] inside:UCCOIC6NrBFrVCcI7tcXNWpQ
2013-12-24 17:38:04.966 TubeAlert[1230:907] inside:UCcMTZY1rFXO3Rj44D5VMyiw
2013-12-24 17:38:05.374 TubeAlert[1230:907] inside:UC-wwO4iPfQtoNjbS792Mpzg
2013-12-24 17:38:05.685 TubeAlert[1230:907] inside:UCrSi7xopc9-SWRMydSq5e1Q
2013-12-24 17:38:06.090 TubeAlert[1230:907] inside:UC-lHJZR3Gqxm24_Vd_AJ5Yw
2013-12-24 17:38:06.500 TubeAlert[1230:907] inside:UCEe076nFuVobN0bAsXK7ICw
2013-12-24 17:38:06.913 TubeAlert[1230:907] inside:UCgSHGbs2oGoLItc-8y5hJ9g
2013-12-24 17:38:07.318 TubeAlert[1230:907] inside:UC-LPIU24bQXVljUXivKEeRQ
2013-12-24 17:38:07.730 TubeAlert[1230:907] outside:(null)

Quindi per favore dimmi dove sto sbagliando, in modo da poter ottenere il risultato stampato sia all'interno che all'esterno del ciclo for. Grazie

risposte:

1 per risposta № 1

Non è mai una buona idea usare una proprietà come variabile di ciclo in a for-in ciclo continuo.

Nel tuo esempio, il valore della variabile pNewString è controllato dal for-in loop, il che significa che è valido solo all'interno del corpo di quel loop. Una volta terminato il ciclo, l'accesso al valore non è sicuro: rapida enumerazione utilizzata dietro la scena per implementare il for-in loop può impostarlo su un valore arbitrario, che sembra essere nil per Cocoa "s NSArrayS.

Per evitare questo problema in futuro, considera di dichiarare il tuo pNewString variabile nell'ambito del loop, in questo modo:

for (NSString * NSString in jsonData) {
...
}

Se si desidera ottenere l'ultimo valore dall'array, utilizzare

NSLog(@"outside:%@", [jsonData lastObject]);

1 per risposta № 2

stai provando a stampare il file pNewString quando è fuori campo. diventa nil al termine del ciclo for.