从 Xcode 中的 php 文件中检索数据

Posted

技术标签:

【中文标题】从 Xcode 中的 php 文件中检索数据【英文标题】:retrieve data from php file in Xcode 【发布时间】:2014-03-06 12:53:52 【问题描述】:

我尝试了不同的代码来发送和检索 php 文件中的数据,但我仍然无法正确获得结果 到目前为止,我得到的检索结果显示在输出调试器中(以 json 格式),但不是在 Xcode 模拟器中。好像我错过了什么!

- (void) retrieveData




NSString * jack=[GlobalVar sharedGlobalVar].gUserName;
NSLog(@"global variable %@", jack);



NSString *rawStr = [NSString stringWithFormat:@"StudentID=%@",jack];
NSData *data = [rawStr dataUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString:@"http://m-macbook-pro.local/studentCourses.php"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

[request setHTTPMethod:@"POST"];
[request setHTTPBody:data];

NSURLResponse *response;
NSError *err;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
NSLog(@"responseData: %@", responseData);

  jsonArray=[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

// Search for the array parameter that should be added
 coursesArray=[[NSMutableArray alloc] init];
//set up our cities array

NSString *strResult = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
NSLog(@"me: %@", strResult);



//loop through our json array

for (int i = 0 ; i <coursesArray.count; i++)

    NSString * cName = [[coursesArray objectAtIndex:i] objectForKey:@"CourseName"];

    //Add the City object to our cities array
    [coursesArray addObject:[[Course alloc]initWithCourseName:cName]];



//Reload our table view
[self.tableView reloadData];

在php文件中

echo json_encode($records);

【问题讨论】:

【参考方案1】:

看起来您正在使用您的帖子数据创建 json 数组,而不是使用从服务器返回的 responseData。

//change this
jsonArray=[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
//to this
jsonArray=[NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:nil];

此外,根据您发布的代码,您似乎从未将服务器返回的结果添加到您的课程数组中。在您创建 cName 的循环中,我认为您想要做的是从 php 调用(您的 jsonArray)的结果中获取课程名称并将它们添加到您的课程数组中。您设置它的方式是从课程数组中获取结果并将其添加到自身。

为你的 for 循环试试这个代码:

 for (int i = 0 ; i <jsonArray.count; i++)
 
     NSString * cName = [[jsonArray objectAtIndex:i] objectForKey:@"CourseName"];

     [coursesArray addObject:[[Course alloc]initWithCourseName:cName]];

 

根据您的代码,我假设 courseArray 包含您的表格视图的数据。

另外请注意,在生产应用中使用同步请求并不是一个好主意,因为它们在主线程上运行并且会阻塞 UI。

【讨论】:

感谢您的帮助,它解决了问题。但是,请问您所说的“将阻止 UI”是什么意思? .. 因为现在我们对另一个导航控制器使用相同的代码并且它显示错误(线程 1:信号 SIGABRT),是否是同步请求导致了这种问题? 表示你的用户界面在主线程上处理。如果您在主线程上执行 Web 请求,您的用户界面将显示为冻结,直到请求完成加载。在不了解更多信息的情况下,我不能说它是否会导致您的崩溃。如果您无法弄清楚,我建议您发布一个单独的问题来解决它。

以上是关于从 Xcode 中的 php 文件中检索数据的主要内容,如果未能解决你的问题,请参考以下文章

从数据库中检索特定行并显示特定行中的所有数据并使用 php 发送 json

从数据库 php 和 mysql 中检索图像的损坏的文件图标

使用 SwiftUI Xcode 11 从 firebase 实时数据库中检索数据

如何使用 php 中的选择选项从数据库中检索所有数据?

在 Xcode 数据模型编辑器中的配置之间移动实体

从视图中检索数据到情节提要中的 UITableViewCell