gpt4 book ai didi

ios - plist 中的字符串不是标准字符串?使用 plist 中的字符串使应用程序崩溃。 iOS系统

转载 作者:行者123 更新时间:2023-11-29 04:28:23 28 4
gpt4 key购买 nike

抱歉,帖子太长了。当我第二次使用 plist 中的字符串时,它使我的程序崩溃。我有 cocos2d 项目( attach ),其中有一个场景和一个对象。和一个 .plist 文件

HelloWorldLayer.h & .m (instantiate from CCLayer) 
NodeObject.h & .m (instantiate from CCNode)
Test.plist

NodeObject中,我有一个本地字符串和两个方法

@interface NodeObject : CCNode
{
NSString *stringForPrint;
}
-(void)createObjWithString:(NSString *)string;
-(void)printString;

在这两个方法中,我们打印在参数 string 中获得的字符串

-(void)createObjWithString:(NSString *)string
{
stringForPrint = string;
NSLog(@"NodeObject.createObjWithString stringForPrint >> %@", stringForPrint);
}

-(void)printString
{
NSLog(@"NodeObject.printString stringForPrint >> %@", stringForPrint);
}

Plis 内容是一个数组,其中包含一个具有项目类型字符串的字典。

Root 
-TestArray <Array>
--item 0 <Dictionary>
---type <String> == "This is string from plist"

为了测试,在场景中我创建NodeObject并从plist获取数据。并打印这个字符串。工作正常。

if ([testDictionary objectForKey:@"TestArray"]) {
for (NSDictionary *tempItemData in [testDictionary objectForKey:@"TestArray"]) {
NSLog(@"type form plist in for loop > %@", [tempItemData objectForKey:@"type"]);//It's cool work. True string from plist.
}
}

我在循环中创建了我的NodeObject。又开始工作了。

if ([testDictionary objectForKey:@"TestArray"]) {
for (NSDictionary *tempItemData in [testDictionary objectForKey:@"TestArray"]) {
NodeObject *testObj = [NodeObject node];
//and send it string from plist
[testObj createObjWithString:[tempItemData objectForKey:@"type"]];
}
}

但是!如果我尝试在printString方法形式NodeObject中使用此字符串,应用程序将崩溃而没有日志。[测试对象打印字符串];//应用程序崩溃

我再说一遍。通过手动字符串工作创建对象。如果使用 plist 中的字符串,则会崩溃。我伤透了头。并且只有第二种方法。在 createObjWithStrig 中它可以工作。

    //Work
NodeObject *testObj = [NodeObject node];
[testObj createObjWithString:@"manual string object"];
[testObj printString]; // Print correct string

//Crash
NodeObject *testObj = [NodeObject node];
[testObj createObjWithString:[tempItemData objectForKey:@"type"]];
[testObj printString]; //Crash here

我是附件project file .可以测试一下

最佳答案

您可以使用descriptionclass方法检查变量背后隐藏的内容。

所以尝试一下

NSLog(@"描述 %@ 和类 %@",[[tempItemData objectForKey:@"type"]description],[[tempItemData objectForKey:@"type"]class]);

这可能会给你一些关于哪里出了问题的信息 - 也许它是空的)

关于ios - plist 中的字符串不是标准字符串?使用 plist 中的字符串使应用程序崩溃。 iOS系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12033492/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com