我正在开发一个应用程序,我需要声明一个像全局变量一样的字符串数组,以便在某些方法中使用它,但问题是我无法分配它。
我的代码:
protected class ServiceTableSource : UITableViewSource
{
**string first = null;
string second = null;
protected string[] uuids;**
protected const string cellID = "BleServiceCell";
public event EventHandler<ServiceSelectedEventArgs> ServiceSelected = delegate {};
public List<CBService> Services {
get { return this._services; }
set { this._services = value; }
}
protected List<CBService> _services = new List<CBService> ();
public override int NumberOfSections (UITableView tableView)
{
return 1;
}
**public override int RowsInSection (UITableView tableview, int section)
{
return uuids.Length; <---- HERE'S THE PROBLEM!!!!
}**
public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
{
UITableViewCell cell = tableView.DequeueReusableCell (cellID);
**CBService service = this._services [indexPath.Row];** <--HERE'S ANOTHER PROBLEM!!!! I CAN`T REMOVE THE [INDEXPATH.ROW] BECOUSE IS A LIST.
if (cell == null) {
cell = new UITableViewCell (UITableViewCellStyle.Subtitle, cellID);
}
**first = service.UUID.ToString();
second = service.Peripheral.Identifier.ToString();
uuids = new string[]{first, second};**
cell.DetailTextLabel.Text = "UUID:" + uuids[indexPath.Row];
return cell;
}
public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
{
**CBService service = this._services [indexPath.Row];** HERE'S ANOTHER PROBLEM!!!!
this.ServiceSelected (this, new ServiceSelectedEventArgs (service));
tableView.DeselectRow (indexPath, true);
}
public class ServiceSelectedEventArgs : EventArgs
{
public CBService Service {
get { return this._service; }
set { this._service = value; }
}
protected CBService _service;
public ServiceSelectedEventArgs (CBService service)
{
this._service = service;
}
}
}
我需要使用&#34; uuids.Lenght &#34;获取行数并使用方法NumberOfSections。如果有人有另一个有效的意识形态,我会同意kkk
我无法定义变量first,second或uuids的valor,因为我的值是services.uuid和services.peripheral.uuid,我无法声明服务
嘲笑代码中的评论。
答案 0 :(得分:5)
我认为您需要的是静态类,您还可以将变量存储在应用程序设置中。
public static class GlobalVariables
{
public static string Global1 = "Hello";
public static string Global2 = "World";
}
现在,您可以在应用程序的任何位置访问这些变量,如下所示:
GlobalVariables.Global1
按照此操作将变量存储在应用程序设置中:
Solution Explorer =&gt;你的项目=&gt;属性=&gt;设置
现在您可以设置变量的名称,类型,范围和值。我附上了截图。
Documentation for Application Setting
我个人更喜欢将我的全局变量存储在我的应用程序设置中,但那只是我。
关注此link,我认为它可以解决您的问题。基本上你在这里看到的是覆盖静态方法,但你不能这样做,但幸运的是链接解决了这个问题。如果这有帮助,请告诉我。
答案 1 :(得分:0)
如果您在谈论静态变量,可以使用它。变量NumberOfWheels
将在类Automobile的所有实例之间共享。
public class Automobile
{
protected static int NumberOfWheels = 4;
public override int getWheels() {
return wheels;
}
}
例如,请在此处查看此链接: http://msdn.microsoft.com/en-US/en-en/library/98f28cdx.aspx#
答案 2 :(得分:0)
我可能会读错了,如果是这样,请告诉我,我会删除我的答案。在我看来,您希望在ServiceTableSource
课程的所有方面都能获得某些数据(有关服务的信息)。我相信你并不一定关心你是怎么做到的,你只是想到一个全局变量可能有帮助吗?
我认为为了解决这个问题,您需要重新考虑使用ServiceTableSource
的方式。通常,当涉及到使用“源”的应用程序时,“源”的实例一旦创建就不会改变。如果您需要根据添加的更多“服务”更新源,那么应创建ServiceTableSource
的新实例并将其分配给UITableView
对象的Source
属性。为了实现这一点,您需要在ServiceTableSource上创建一个构造函数,该构造函数接收“服务”集合并将它们保存到私有变量,并执行从服务中获取数据并创建{{1}的所有逻辑。 }。通过这种方式,您可以访问为此类中的所有string[] uuids
方法创建实现所需的所有信息。
以下是我更新代码的看法。我的应用程序周围没有任何其他上下文,因此我无法对此进行测试。让我知道这是怎么回事,如果有问题,我可以帮助你解决这些问题。另外,我不确定你要对这个事件做什么。对此进行一点澄清也会有所帮助。
overridden
答案 3 :(得分:-2)
**public override int RowsInSection (UITableView tableview, int section)
{
return uuids.Length; <---- HERE'S THE PROBLEM!!!!
}**
试试这个:
**public override int RowsInSection (UITableView tableview, int section)
{
return uuids.Count; <---- HERE'S NOPROBLEM!!!!
}**
如果你想要数组中的对象数量或IEnummerable形式的东西,你可以使用Count来获取对象。 如果你想要该数组中一个对象的长度,你必须在代码行中指定该对象,如:return uuids [1337] .length