创建像iPhone这样的高分榜系统

时间:2009-06-21 05:45:16

标签: iphone objective-c xcode nsmutablearray

我很抱歉打开一个新问题,我不得不 - 因为我将我的iPhone中的另一个问题写成未注册的用户,并且从iPhone上写字不太舒服。

改述这个问题:

是否可以使用:

  

[NSMutableArray writeToURL:(NSString *)path atomically:(BOOL)AuxSomething];

为了将文件(NSMutableArray)XML文件发送到网址,并更新网址以包含该文件?

例如: 我有一个数组,我想将其上传到特定的URL,下次启动应用程序时我想下载该数组。

  

NSMutableArray * arrayToWrite = [[NSMutableArray alloc] initWithObjects:@“One”,@“Two”,nil];

     

[arrayToWrite writeToURL:

     

[NSURL urlWithString:@“mywebsite.atwebpages.com/myArray.plist”] atomically:YES];

在运行时:

  

NSMutableArray * arrayToRead =

     

[[NSMutableArray alloc] initWithContentsOfURL:[NSURL urlWithString:@“mywebsite.atwebpages.com/myArray.plist”]];

意思是,我想将一个NSMutableArray写入一个URL,该URL位于Web托管服务上(例如batcave.net),URL接收该信息并相应地更新服务器端文件。 像设置这样的高分,用户发送他的分数,服务器更新它的文件,其他用户在运行时下载高分。

我希望这一点得到澄清。

编辑:我正在寻找的是脚本PHP或ASP,因此网站,数据发送到的URL将知道如何处理它。如果可以在Web托管服务上执行此操作,我想要一个关于如何实现此脚本来处理数据的示例或教程。

〜提前致谢。

2 个答案:

答案 0 :(得分:2)

要回答“如何创建类似系统的高分?”这一问题,系统有多个部分:

  • 您需要为每个用户提供一个ID(在iPhone上生成的GUID以及用户名应该足够)。
  • 您需要一台服务器:记住高分;得到用户的高分;显示(在网站上)高分和/或使高分可供下载到手机。
  • 你需要一些欺诈保护,尽管这可能会打败与越狱者的战斗。

在iPhone应用程序方面,您可能希望能够下载显示的当前高分,这可以通过以下方式轻松完成:

int statusCode = 0;
NSData* result = nil;
NSHTTPURLResponse* response = nil;
NSError* error = nil;
NSString* url = @"http://www.yourserver.com/highscores.php"; // returns XML plist data
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:180];
result = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
//  NSLog( @"NSURLConnection result %d %@ %@", [response statusCode], [request description], [error description] );
statusCode = [response statusCode];
if ( (statusCode == 0) || (!result && statusCode == 200) ) {
    statusCode = 500;
}

由于它是同步的,您可能希望将其放在NSOperation中。或者,您可以使用

+ (NSURLConnection *)connectionWithRequest:(NSURLRequest *)request delegate:(id)delegate

要发送高分数据,因为它太小,最简单的方法就是在网址中对其进行编码。

NSString* url = [NSString stringWithFormat:@"http://www.yourserver.com/sethighscores.php?uid=%@;name=%@;score=%d;antifraud=%@", [uid encodeParameter], [name encodeParameter], score, [secureHash encodeParameter]];

其中encodeParameter是NSString上的自定义类别,用于编码URL参数,secureHash是一个字符串,表示uid,名称,分数以及iPhone应用程序和网站已知的某个秘密的单向安全哈希。你需要自己解决这些问题或者提出不同的问题,因为这已经很久了。

答案 1 :(得分:0)

根据NSData writeToURL文档(至少对于iPhone OS 2.2.1):

“由于目前只支持file:// URL,因此除了第一个参数的类型外,此方法与writeToFile:atomically:之间没有区别。”

尽管NSArray / NSDictionary / NSString的文档没有特别提及限制,但似乎很可能同样的限制适用。

因此,您必须使用其他一些机制上传XML。

此外,网站通常是只读的,除非您在网络服务器上提供特定代码以支持上传。