我已经在iOS和Android应用程序中编写了一个打开网址的功能。我相信该代码将因未通过IPv6连接而被iTunes Connect拒绝。
当我通过Delphi构建它时,此函数也会引发错误:
在错误地址00000001017C4334发生访问冲突。 (访问地址000000000000000时)
我正在Indel 10上使用Delphi 10.2.3 Tokyo。
如何解决此错误?我的代码如下:
Procedure OpenGoogleForm;
Var
ipversion : String;
Begin
// For IPv6
IdTCPClient1.IPVersion:=Id_IPv4; // <-- try IPv4 first
IdTCPClient1.Host:=MY_IP;
try
IdTCPClient1.Connect;
result:=true;
ipversion := 'IPv4'; // <-- will tell us what ip version to use
except
end;
if IdTCPClient1.Connected=false then
begin
try
IdTCPClient1.IPVersion:=Id_IPv6; // <-- now try IPv6
IdTCPClient1.Connect;
result:=true;
ipversion:='IPv6'; // <-- will tell us what ip version to use
except
end;
end;
// open url
{$IFDEF ANDROID}
Intent := TJIntent.Create;
Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
Intent.setData(StrToJURI('https://docs.google.com/forms/xxxx'));
SharedActivity.startActivity(Intent);
{$ENDIF}
{$IFDEF IOS}
SharedApplication.openURL(StrToNSUrl('https://docs.google.com/forms/xxxx'));
{$ENDIF}
End;
答案 0 :(得分:3)
错误消息告诉您正在访问nil
指针,因此您需要对其进行追查。
但是,根本没有理由在打开URL之前执行手动TCP检查。您正在生成一个外部应用程序以打开URL,因此请让该应用程序根据需要处理连接错误。特别是因为如果两个Connect()
调用均失败,则无论如何都要继续打开URL。因此,只需从您的过程中完全删除TIdTCPClient
,它就不属于那里。这可能就是您的nil
指针的来源。
procedure OpenGoogleForm;
begin
{$IFDEF ANDROID}
Intent := TJIntent.Create;
Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
Intent.setData(StrToJURI('https://docs.google.com/forms/xxxx'));
SharedActivity.startActivity(Intent);
{$ENDIF}
{$IFDEF IOS}
SharedApplication.openURL(StrToNSUrl('https://docs.google.com/forms/xxxx'));
{$ENDIF}
end;