Ich erhalte diese Fehlermeldung, wenn meine app starten:Fehler beim App-Start: Foundation.MonoTouchException: Objective-C-Ausnahme ausgelöst (Xamarin iOS)
Foundation.MonoTouchException: Objective-C-Ausnahme ausgelöst. Name: NSInvalidArgumentException Grund: - [Table initWithCoder:]: Unbekannter Selektor gesendet Instanz 0x796e6fa0
ich bereits auf Google gesucht, aber nicht finden eine Lösung.
Über die App: Die App hat eine UITableView mit einigen benutzerdefinierten Zellen. Das UITableView befindet sich in einer normalen "Ansicht". Es gibt auch eine Schaltfläche in der normalen "Ansicht", diese Schaltfläche sollte (bei Berührung) eine benutzerdefinierte Zelle zu UITableView hinzufügen.
Das UITableView hat den Namen "tableView" und in den Eigenschaften der Klasse "TableSource". Der Button hat den Namen "btn01" und in Eigenschaften als Klasse "ViewController".
Die benutzerdefinierten Zellen haben als "Wiederverwendungskennung" "Cell01Reuse", "Cell02Reuse" usw. Und als Klasse "Testclass" (die nicht als Datei existiert).
Der View Controller (die Basis, wo alles läuft) hat "ViewController" als Klasse.
Ich habe zwei Klassen mit Code. Zunächst ist „View Controller“:
using System;
using UIKit;
using Foundation;
using System.Collections.Generic;
namespace myapp
{
public partial class ViewController : UIViewController
{
public ViewController(IntPtr handle) : base(handle)
{
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
// Perform any additional setup after loading the view, typically from a nib.
//UITableView _table;
//_table = new UITableView
//{
// Frame = new CoreGraphics.CGRect(0, View.Bounds.Height * 0.03, View.Bounds.Width, View.Bounds.Height * 0.80),
// Source = new TableSource(null)
//};
//_table.SeparatorStyle = UITableViewCellSeparatorStyle.None;
//View.AddSubview(_table);
TableSource TS = new TableSource();
btn01.TouchUpInside += (sender, e) =>
{
TS.updateTableView();
string cell01 = "Cell01Reuse";
TS.tableItems.Add(cell01);
};
}
public override void DidReceiveMemoryWarning()
{
base.DidReceiveMemoryWarning();
// Release any cached data, images, etc that aren't in use.
}
}
}
Zweitens ist „Table“:
using System;
using System.Collections.Generic;
using System.Text;
using Foundation;
using UIKit;
namespace myapp
{
public partial class TableSource : UITableViewSource
{
//string[] tableItems;
public List<string> tableItems = new List<string>();
public static string cellIdentifier = "TableCell";
//public TableSource(string[] items)
//{
// tableItems = items;
//}
public TableSource()
{
}
public override nint RowsInSection(UITableView tableview, nint section)
{
return 0;
}
public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
{
UITableViewCell cell = tableView.DequeueReusableCell(cellIdentifier);
if (cell == null)
{
cell = new UITableViewCell(UITableViewCellStyle.Default, cellIdentifier);
}
cell.TextLabel.Text = tableItems[indexPath.Row];
tableItems.Add(Convert.ToString(cell));
return cell;
}
public override nint NumberOfSections(UITableView tableView)
{
return base.NumberOfSections(tableView);
}
public override void RowSelected(UITableView tableView, NSIndexPath indexPath)
{
new UIAlertView("Alert", "You touched: " + tableItems[indexPath.Row], null, "OK", null).Show();
tableView.DeselectRow(indexPath, true);
}
public void updateTableView()
{
tableView.updateTableView();
}
}
}
Hilft ein bisschen, aber löst nicht mein Problem. Ich kann meine Situation nicht besser beschreiben als oben. Aber danke! – Reaper
Können Sie Ihre Lösung irgendwo teilen? Oder geben Sie mir mehr Details, um Ihnen zu helfen. Übrigens sollten Sie das UITableView nicht als Eigenschaft in Ihrer UITableSource definieren. –
Danke nochmal für die Antwort. Ich habe es geschafft, einen anderen Weg zu gehen, um meine "Aufgabe" zu lösen. Ich benutzte ein Beispiel von Xamarin und baute es um. Hier ist das Beispiel: https://developer.xamarin.com/recipes/ios/content_controls/tables/custom-tableviewcell/ Ich habe das Problem nicht mehr im Moment. Gibt es eine Möglichkeit, dich irgendwie zu benachrichtigen, wenn ich wieder auf dieses Problem (oder ein ähnliches Problem) stoße? Weil du von Xamarin zu wissen scheinst. Danke nochmal für deine Mühe! ps: Ich habe Ihren Beitrag als Antwort markiert, denn wenn ich immer noch das Problem hätte, hätten Sie mir geholfen, es zu lösen. – Reaper