Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSString、EXC_BAD_访问和stringByAppendingString_Objective C_Cocoa_Nsstring - Fatal编程技术网

Objective c NSString、EXC_BAD_访问和stringByAppendingString

Objective c NSString、EXC_BAD_访问和stringByAppendingString,objective-c,cocoa,nsstring,Objective C,Cocoa,Nsstring,我编写了以下代码: NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding]; NSDictionary *reportDic = [jsonparser objec

我编写了以下代码:

NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
NSDictionary *reportDic = [jsonparser objectWithString:json_string error:nil];
NSDictionary *reporttable = [reportDic objectForKey:@"reporttable"]; 
NSArray *rows = [reporttable objectForKey:@"rows"];


NSString *table = [[NSString alloc]initWithString:@"<table>"] ;
for (NSDictionary *row in rows)
{

    table = [table stringByAppendingString:@"<tr>"];

    NSArray *cells = [row objectForKey:@"cells"];
    for (NSString *cell in cells){
        table = [table stringByAppendingString:@"<td>"];
        table = [table stringByAppendingString:cell];
        table = [table stringByAppendingString:@"</td>"];
    }

    table = [table stringByAppendingString:@"</tr>"];
    index++;
}
table = [table stringByAppendingString:@"</table>"];
return [table autorelease]; 

无论是否发布,内存管理都是错误的

更改:

NSString *table = [[NSString alloc]initWithString:@"<table>"] ;
致:

原因是您在末尾自动删除的表是前一行构造的表:

table = [table stringByAppendingString:@"</table>"];
table=[table stringByAppendingString:@”“;

因此,您将自动释放该表两次(
stringByAppendingString:
返回一个自动释放的实例),而根本不释放原始表。

您的内存管理是错误的

更改:

NSString *table = [[NSString alloc]initWithString:@"<table>"] ;
致:

原因是您在末尾自动删除的表是前一行构造的表:

table = [table stringByAppendingString:@"</table>"];
table=[table stringByAppendingString:@”“;

因此,您将自动释放该表两次(
stringByAppendingString:
返回一个自动释放的实例),而根本不释放原始表。

关于更新,如果您正确地合并了tewhas的建议,
-fetchTable:psw:
返回一个自动释放的
NSString
,因此,您不应该在调用方法中释放它:

NSString *data = [appDelegate fetchTable:name psw:psw]
// ...
[data release]; // don't do that, data is autoreleased
-fetchTable:psw:
应该像这样处理

NSString *table = [NSString stringWithString:@"<table>"] ;

// ... leave the rest as it is

return table;
NSString*表=[nsstringwithstring:@”“;
// ... 剩下的就这样吧
返回表;

请注意,您也在泄漏
json\u string
,您应该
-release
-autorelease
它。

关于更新,如果您正确地合并了tewhas的建议,
-fetchTable:psw:
返回一个自动删除的
NSString
,因此您不应该在调用方法中释放它:

NSString *data = [appDelegate fetchTable:name psw:psw]
// ...
[data release]; // don't do that, data is autoreleased
-fetchTable:psw:
应该像这样处理

NSString *table = [NSString stringWithString:@"<table>"] ;

// ... leave the rest as it is

return table;
NSString*表=[nsstringwithstring:@”“;
// ... 剩下的就这样吧
返回表;

请注意,您也在泄漏
json\u字符串
,您应该
-release
-autorelease
它。

使用?当前方法的一个问题是会不必要地淹没自动释放池

NSMutableString *table = [NSMutableString string];

[table appendString:@"<table>"];
for (NSDictionary *row in rows)
{
    [table appendString:@"<tr>"];

    NSArray *cells = [row objectForKey:@"cells"];
    for (NSString *cell in cells){
        [table appendFormat:@"<td>%@</td>", cell];

    [table appendString:@"</tr>"];

    index++;
}
[table appendString:@"</table>"];
return table;
NSMutableString*表=[NSMutableString];
[表附录字符串:@”“];
用于(NSDictionary*行中的行)
{
[表附录字符串:@”“];
NSArray*单元格=[row objectForKey:@“单元格];
for(NSString*单元格中的单元格){
[表格格式:@“%@”,单元格];
[表附录字符串:@”“];
索引++;
}
[表附录字符串:@”“];

return table;
如何使用函数构造表?当前方法的一个问题是会不必要地淹没自动释放池

NSMutableString *table = [NSMutableString string];

[table appendString:@"<table>"];
for (NSDictionary *row in rows)
{
    [table appendString:@"<tr>"];

    NSArray *cells = [row objectForKey:@"cells"];
    for (NSString *cell in cells){
        [table appendFormat:@"<td>%@</td>", cell];

    [table appendString:@"</tr>"];

    index++;
}
[table appendString:@"</table>"];
return table;
NSMutableString*表=[NSMutableString];
[表附录字符串:@”“];
用于(NSDictionary*行中的行)
{
[表附录字符串:@”“];
NSArray*单元格=[row objectForKey:@“单元格];
for(NSString*单元格中的单元格){
[表格格式:@“%@”,单元格];
[表附录字符串:@”“];
索引++;
}
[表附录字符串:@”“];

return table;
然后你需要发布调用方法。然后你需要发布调用方法。@amnon:你也需要不释放调用方法中的字符串。然后它应该可以工作。如果不可以,发布你修改过的代码,因为tewha所说的应该可以工作。谢谢,这就解决了我在这之后得到的exec\u bad\u访问的问题由于在处理json请求的nsmutablerequest对象时出错,它花了一些时间查找,但malloc_history做到了……感谢everyoneamnon,你不了解iPhone/Mac OS X内存管理的时间越长,你需要更正的代码就越多。确保你阅读了上面的苹果文本。你可能不会理解它完全还没有,但你会更接近。:@amnon:你也不需要在调用方法中释放字符串。那么它应该可以工作。如果没有,请发布你的修订代码,因为tewha所说的应该可以工作。谢谢,这解决了我在这之后得到的exec_bad_访问的问题,因为处理nsmutablerequest对象f时出错或者json请求,它花了一些时间找到它,但malloc_history做到了…谢谢大家,你不了解iPhone/Mac OS X内存管理的时间越长,你需要更正的代码就越多。确保你阅读了上面的苹果文本。你可能还不能完全理解它,但你会更接近它。:)有一个类似的例子在构建CSV文件时出现了一个类似的情况。这解决了它!在构建CSV文件时出现了一个类似的情况。这解决了它!