2014-10-18 102 views
0

这是我见过的最奇怪的错误。
我正在创建一个从文本文件加载级别的迷宫游戏,但如果该文件有三行以上,它似乎会随机更改大部分变量。我加载一个文本文件,然后运行这些代码,并根据它的字母在适当的位置创建一个对象。
有什么建议吗?从文件中读取文本的XCODE擦除变量

文本文件:
TTTTTTTTTTTTTTTTT
TTTTTTTTTTTTTTTTT
TTTTTTTTTTTTTTTTT
TTTTTRPPGPPDTTTTT
TTTTTPTPTPTPTTTTT
TTTTTPPPWPPPTTTTT
TTTTTPTPPPTPTTTTT
TTTTTPPPTPPPTTTTT
TTTTTPTPPPTPTTTTT
TTTTTUPPPPPLTTTTT
TTTTTTTTPTTTTTTT Ť
TTTTTTTTBTTTTTTTT
TTTTTTTTPTTTTTTTT

NSString *path = [[NSBundle mainBundle] pathForResource:@"map2c" ofType:@"txt"]; 
NSString *contents = [NSString stringWithContentsOfFile:path encoding:NSASCIIStringEncoding error:nil]; 
NSArray *lines = [contents componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"\r\n"]]; 
int y = 0; 
for (NSString* line in lines) { 

    NSString* ty = @"TBGWUDLRP"; 
    char *str = (char *)[line UTF8String]; 
    char *str2 = (char*)[ty UTF8String]; 
    grannyMoving = 2; 
    int x = str2[0]; 
    char x2 = str2[1]; 
    char GrannyStr = str2[2]; 
    char wolfStr = str2[3]; 

    char UpStr = str2[4]; 
    char DownStr = str2[5]; 
    char leftStr = str2[6]; 
    char rightStr = str2[7]; 
    char PathStr = str2[8]; 
    y--; 
    maxY = y; 
    if (line.length) { 
     maxI = line.length; 
     for (int i = 0; i< line.length; i++) {     
SKSpriteNode* tree = [SKSpriteNode spriteNodeWithImageNamed:@"tree3"]; 
      tree.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(31, 31)]; 
      tree.physicsBody.affectedByGravity = false; 
      tree.physicsBody.dynamic = NO; 
      tree.position = CGPointMake(64*i+20, 64*y+800); 
      tree.zPosition = -1* tree.position.y; 

回答

0

documentation

此C字符串是一个指向字符串对象, 内部的结构,其可具有寿命比字符串对象短和 肯定不会有更长的使用寿命。因此,如果需要将C 字符串存储在您使用此属性的内存上下文之外( ),则应复制C 字符串。

要解决这个问题,你必须复制UTF8String返回的字符。 This answer提供了两种解决方案。

+0

被重置的变量不仅仅是这些,而且甚至在此之前设置的属性,包括skivation – 2014-11-05 21:35:51

+0

也为我分配的变量获取exc_bad_access – 2014-11-05 21:39:32