gpt4 book ai didi

ios - 从 Documents 目录存储和读取文件 iOS 5

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:45:31 27 4
gpt4 key购买 nike

在我的游戏中,当一个关卡完成时,应用程序会在应用程序的文档目录中的一个文件中存储一个“1”。当游戏随后加载时,玩家只能在上一关已经完成的情况下才能玩下一关。当我通过 Xcode 在设备上测试游戏时,应用程序正常运行,并且在完成上一关之前无法玩关卡。但是,当该应用程序在 App Store 上获得批准并发布时,该应用程序的行为就好像每个级别都已完成(无锁定级别)。我无法弄清楚这一点,希望有人能提供帮助!我正在测试的设备都是 iOs 5.0 或更高版本。

下面是将完成的关卡保存在Documents目录中的代码:

 NSMutableData* data = [[NSMutableData alloc] init];
NSKeyedArchiver* coder = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
NSString *levelString = [NSString stringWithFormat:@"Level%d",level];
[coder encodeInteger:1 forKey:levelString];
[coder finishEncoding];
NSString *levelString2 = [NSString stringWithFormat:@"Level%d.save",level];
///
NSFileManager *filemgr;
NSString *dataFile;
NSString *docsDir;
NSArray *dirPaths;

filemgr = [NSFileManager defaultManager];

// Identify the documents directory
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

docsDir = [dirPaths objectAtIndex:0];

// Build the path to the data file
dataFile = [docsDir stringByAppendingPathComponent:levelString2];

// Check if the file already exists
if ([filemgr fileExistsAtPath: dataFile])
{
[[NSFileManager defaultManager] removeItemAtPath:dataFile error:nil];
}
[data writeToFile:dataFile atomically:YES];
[coder release];
[data release];
}
@catch (NSException* ex)
{
CCLOG(@"level save failed: %@", ex);
}

下面是读取Document目录以查看关卡是否已经完成的代码:

if ([self loadCompletedLevels:6] == 1) { //// level gets unlocked **** }

-(int) loadCompletedLevels:(int)theLevel; {

int isLevelCompleted; //1 = completed

NSString* kSaveFile = [NSString stringWithFormat:@"Level%d.save",theLevel];
NSString *levelString = [NSString stringWithFormat:@"Level%d",theLevel];

@try
{

NSFileManager *filemgr;
NSString *dataFile;
NSString *docsDir;
NSArray *dirPaths;

filemgr = [NSFileManager defaultManager];

// Identify the documents directory
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

docsDir = [dirPaths objectAtIndex:0];

// Build the path to the data file
dataFile = [docsDir stringByAppendingPathComponent:kSaveFile];


if ([[NSFileManager defaultManager] fileExistsAtPath:dataFile])
{
NSData* data = [[NSData alloc] initWithContentsOfFile:dataFile];

if (data && [data length] > 0)
{
NSKeyedUnarchiver* decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
isLevelCompleted = [decoder decodeIntForKey:levelString];

[decoder release];
}

[data release];
}
if (isLevelCompleted == 1) {
levelCompleted = YES;

}
}
@catch (NSException* ex)
{

levelCompleted = NO;
}
return isLevelCompleted; }

最佳答案

您可能应该使用不同的方法来存储数据,但真正的问题是您没有初始化返回值 isLevelCompleted。它在堆栈上,没有默认值。它从恰好位于该堆栈位置的任何内容开始。

因此,如果您不设置它,它将具有任意值。

此外,您可能应该使用 BOOL 作为 bool 值,但如果您这样做:

int isLevelCompleted = 0;  //1 = completed

您会将其初始化为“false”,因此您的代码必须将其显式更改为“true”。

关于ios - 从 Documents 目录存储和读取文件 iOS 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10201944/

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