iOS值在for循环外部打印为NULL,但在for循环内打印良好

时间:2013-12-24 12:29:20

标签: objective-c for-loop ios6

我发布了我尝试过的代码。

 .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)

所以请告诉我哪里出错了,这样我就可以在for循环内外打印结果。谢谢

2 个答案:

答案 0 :(得分:1)

当它超出范围时,你会尝试打印pNewString。在for循环完成后它变为nil

答案 1 :(得分:1)

for - in循环中将属性用作循环变量绝不是一个好主意。

在您的示例中,变量pNewString的值由for - in循环控制,这意味着它仅在该循环的主体内有效。循环完成后,访问该值并不安全:在场景后面使用快速枚举来实现for - in循环可以将其设置为任意值,该值似乎为{{ 1}}用于Cocoa的nil s。

为避免将来出现此问题,请考虑在循环范围内声明NSArray变量,如下所示:

pNewString

如果您想从数组中获取最后一个值,请使用

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