为什么 NSString 说它“无效”,objC,IPhone?

发布于 2024-09-06 22:06:45 字数 537 浏览 5 评论 0原文

我有一个视图控制器, 我声明 NSString *xTitle 位于 testViewController.m 文件的顶部

当我在 viewload 事件中设置 xTitle=@"anytext" 时, ; 我点击一个按钮,它显示了 UIActionsheet。

我尝试读取 UIActionSheet 的 clickedButtonAtIndex 中的 xTitle。 我看到 xTitle 的值是“anytext”,没问题。

但是当我从 NSDictionary 设置 xTitle 时,它​​显示无效。

视图加载事件;

NSDictionary *results = [jsonString JSONValue];
xTitle  = [results valueForKey:@"ContentURL"];

NSLog(@"%@", xTitle);-->它写入值 但我无法读取 uiactionsheet 事件中的 xTitle。它说无效。

为什么说“无效”?

I have a ViewController,
i declare
NSString *xTitle at the top in testViewController.m file

when i set the xTitle=@"anytext" in viewload event;
and i tap a button, it shows the UIActionsheet.

i try to read xTitle in UIActionSheet's clickedButtonAtIndex.
i see the xTitle's value "anytext", its ok.

but when i set the xTitle from NSDictionary, it says Invalid.

viewload event;

NSDictionary *results = [jsonString JSONValue];
xTitle  = [results valueForKey:@"ContentURL"];

NSLog(@"%@", xTitle);--> it writes the value
but i cant read xTitle in uiactionsheet events. it says invalid.

why does it say "Invalid"?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

阿楠 2024-09-13 22:06:45

由于您希望字符串比函数的寿命更长,因此您可能需要这样做:

xTitle = [[results valueForKey:@"ContentURL"] retain];

当然,当您完成它时,在随后的某个时刻释放它。

当您使用 NSString 文字 @"anytext" 时,这不会影响您,因为常量字符串基本上是静态的——也就是说,它们通常在代码的整个生命周期中一直存在。您可以(也许在某种迂腐的意义上应该)保留释放这些,但它实际上对它们没有任何作用。

(我对此的范围有点好奇 - 如果 xTitle 是在 .m 文件的顶部声明的,那么您如何在您的行动表——但我认为这与这个问题无关。)

Since you want the string to outlive the function, you probably need to do:

xTitle = [[results valueForKey:@"ContentURL"] retain];

And of course release it at some subsequent point when you're finished with it.

This doesn't affect you when using the NSString literal @"anytext" because constant strings are basically static -- that is, they normally stick around for the whole lifetime of your code. You can (and maybe in some pedantic sense should) retain and release these too, but it doesn't actually do anything to them.

(I'm a little bit curious about the scoping of this -- if xTitle is declared at the top of the .m file, how do you get at it in your action sheet -- but I don't think that's germane to this problem.)

思慕 2024-09-13 22:06:45

尝试直接执行,

NSLog (@"%@", results);

创建后 以准确查看字典中的内容。编辑以向我们展示字典中的内容。

Try doing

NSLog (@"%@", results);

Direcly after you create it to see exactly what is in the dictionary. Edit to show us what is in the dictionary.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文