個人情報を保持するテーブルビューがあります。情報は textviews から取得され、配列に配置され、最終的にディスク上の txt ファイルに保存されました。人がエントリを選択して個人情報を更新すると、ファイルを読み、データを配列に戻し、テキストビューに元のデータを入力したい これは私の問題です。テキストビューにファイルのデータを入力したい。
人を選択することはできますが、System.NullReferenceException: Object reference not set to an instance of an object を受け取ります。
Xamian などのサンプルを使用して、テーブルビューにデータを入力しています。私のプログラムは、パブリック部分クラス RegistrantScreen : UIViewController で構成されており、テキストビューとその他のコントロールがあります。xib を使用して物理インターフェイスを作成しました。私のパブリック クラス registrantTableSource : UITableViewSource には通常のメソッド RowsinSection と RowSelected があります。どの個人データを更新する必要があるかを知る方法として、RowSelected を使用します。人物を選択すると、RowSelected が起動し、処理が開始されます。選択した人のインデックス番号を返し、ファイルを読み取って配列に配置します。配列データを使用してテキストビューにデータを入力しようとすると、null 参照例外が発生します。
以下は、人が選択したインデックスを取得し、他のクラスに戻す 2 つの方法です。
public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
{
//myPersonSelected = new RegistrantScreen (facility);
AnIndexSelected = true;
//need to read the fac file so we know if on site or off site for populating the boxes.
int person = indexPath.Row ;
//new UIAlertView("Row Selected", tableItems[indexPath.Row], null, "OK", null).Show();
tableView.DeselectRow (indexPath, true);
upDateOne (person);//jump over and get the file and fill an array for the person selected.
}//end of public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
public void upDateOne(int rowPerson)//rowPerson is the selected index of registrants.
{
string facilityFolder =Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
facilityFolder = System.IO.Path.Combine (facilityFolder , "Facilities");
facilityFolder = System.IO.Path.Combine (facilityFolder, "tmpFacility");
string facility = File.ReadAllText (facilityFolder);//has the name of the facility to open
string tmpRegistrants = facility.Replace ("fac", "par");//this holds the participants information.
facilityFolder =Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
facilityFolder = System.IO.Path.Combine (facilityFolder , "Facilities");
tmpRegistrants = facility.Replace ("fac", "par");//this holds the participants information.
facilityFolder = System.IO.Path.Combine (facilityFolder , tmpRegistrants );//should be reading the par file now.
registrants = System.IO.File.ReadAllLines (facilityFolder);//this is the array for the selected participant.
//string [] personToUpdate = registrants[rowPerson];
//fillBoxes (Convert.ToString ( registrants[rowPerson]) );
//need to populate the text boxes next.
//need to check for commas again.
RegistrantScreen myPersonSelected;
myPersonSelected = new RegistrantScreen (facility );
//myPersonSelected .tableIndexChanged (rowPerson);
myPersonSelected.updateForOne(rowPerson );
;
}//end of public void upDateOne(int rowPerson)
ここにデータを渡します。
public void updateForOne(int person)//fill the textboxes for one person.
{
facilityFolder=Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
facilityFolder= System.IO.Path.Combine (facilityFolder, "Facilities");
facilityName= System.IO.Path.Combine (facilityFolder, Title);
facilityLines = System.IO.File.ReadAllLines (facilityName);//get the facility info to use for decision making.
string participantFile = facilityName.Replace ("fac", "par");
string [] participantList = System.IO.File.ReadAllLines (participantFile);//get all the participants
char [] deLimChars = { ',' };
string[] words = participantList[person].Split( deLimChars );
RegistrantScreen myTest = new RegistrantScreen (Title );
tbXXXXapproval.Text = words[0]; ****Null reference exception here.****
オブジェクトはガベージ コレクションされると思いますが、テキストビューやその他のコントロールが null にならないようにするプロセスが見つかりません。ヘルプやポインタをいただければ幸いです。