- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在使用 Monotouch 框架为 IOS 制作一个应用程序,该框架有一个 UITableView 和一个包含 UISwitches 的自定义 UITableViewCell(使用 XCode 设计)。
我通过 UITableViewSource 管理单元格,但在管理分配给单元格开关事件 UISwitch.ValueChanged 的委托(delegate)方法的回调时,我显然遇到了问题。
这是我正在处理的 UITableViewSource 代码,它可能更明确:
// This class manages the TableView content and its rows
class MyTableViewDelegate : UITableViewSource
{
SatellitesViewController satController;
List<long> allocatedCells;
public MyTableViewDelegate (SatellitesViewController controller)
{
satController = controller;
allocatedCells = new List<long>();
}
public override int RowsInSection (UITableView tableview, int section)
{
return satController.sats.Count;
}
// Called when the switch to show the satellite's display state is touched
public void showButtonHandler(object sender, EventArgs e)
{
System.Console.WriteLine("SHOW BUTTONHANDLER");
if (sender != null)
{
CustomSwitch switchButton = (CustomSwitch) sender;
TLEForRedis satToShow = this.satController.getSatTLEs(switchButton.idSat, false);
if (satToShow != null)
{
if (switchButton.On == true)
this.satController.glView.showSatellite(satToShow);
else
this.satController.glView.hideSatellite(satToShow.Id);
}
}
}
// Called when the switch to show the satellite's display state is touched
public void orbitButtonHandler(object sender, EventArgs e)
{
System.Console.WriteLine("ORBIT BUTTONHANDLER");
if (sender != null)
{
CustomSwitch orbitButton = (CustomSwitch) sender;
TLEForRedis satToShow = this.satController.getSatTLEs(orbitButton.idSat, false);
if (satToShow != null)
this.satController.glView.setSatelliteOrbitDisplayState(satToShow.Id, orbitButton.On);
}
}
// Create the cell at indexPath
public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
{
string cellName;
string nibName;
cellName = "PROTO_CELL";
nibName = "CellView";
// Get the table cell which is described in the CellView.xib interface
var cell = tableView.DequeueReusableCell(cellName) as CellView;
if (cell == null)
{
cell = new CellView();
var views = NSBundle.MainBundle.LoadNib(nibName, cell, null);
cell = Runtime.GetNSObject( views.ValueAt(0) ) as CellView;
}
// Modify the cell with its own data
SatsList sat = (SatsList) satController.sats [indexPath.Row];
CustomSwitch showButton = (CustomSwitch)cell.ViewWithTag(1);
UILabel satName = (UILabel)cell.ViewWithTag(2);
UILabel catalogNumber = (UILabel)cell.ViewWithTag(3);
CustomSwitch favoriteButton = (CustomSwitch)cell.ViewWithTag(4);
CustomSwitch orbitButton = (CustomSwitch)cell.ViewWithTag(5);
UIColor lightgrey = new UIColor(0.85f, 0.85f, 0.85f, 1.0f);
tableView.BackgroundColor = lightgrey;
if (sat != null)
{
satName.Text = sat.satName;
catalogNumber.Text = string.Format("{0}", sat.catalogNumber);
}
else
System.Console.WriteLine("[ERROR] Satellite was not found for row " + indexPath.Row);
// Set switch state to on when the satellite is already being displayed
if (this.satController.glView.checkForSatelliteExistency(sat.Id))
{
System.Console.WriteLine(sat.satName + "found");
showButton.SetState(true, false);
Satellite sat3D = this.satController.glView.checkForSatelliteOrbit(sat.Id);
if (sat3D.displayOrbit())
orbitButton.SetState(true, false);
}
else // force switch state to off when satellite is not displayed yet
{
showButton.SetState(false, false);
orbitButton.SetState(false, false);
}
favoriteButton.SetState(false, false);
// Bind changing state switches' events in order to display or hide the corresponding satellite
showButton.setData(sat.Id);
favoriteButton.setData(sat.Id);
orbitButton.setData(sat.Id);
if (!this.allocatedCells.Contains(indexPath.Row))
{
showButton.ValueChanged += this.showButtonHandler;
orbitButton.ValueChanged += this.orbitButtonHandler;
}
this.allocatedCells.Add(indexPath.Row);
return cell;
}
实际上,上面代码的结果是,我可以在 tableView 中向上/向下滚动而不会出现问题,我什至可以打印“SHOW BUTTONHANDLER”行,直到我不点击一个已经通过滚动离开屏幕的开关。但是,当我点击一个开关,该开关是之前在列表顶部绘制并在我滚动回顶部后重新出现的单元格的一部分时,我收到以下错误:
[7864:1507] -[UIControlTargetAction BridgeSelector]: unrecognized selector sent to instance 0x14462a70
或以下堆栈跟踪:
Stacktrace:
at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication.UIApplicationMain (int,string[],intptr,intptr) <IL 0x0009f, 0xffffffff>
at MonoTouch.UIKit.UIApplication.Main (string[],string,string) [0x00042] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:29
at App.Application.Main (string[]) [0x0001b] in App/Main.cs:24
at (wrapper runtime-invoke) <Module>.runtime_invoke_void_object (object,intptr,intptr,intptr) <IL 0x00050, 0xffffffff>
Native stacktrace:
0 App 0x0009094c mono_handle_native_sigsegv + 284
1 App 0x00005cd8 mono_sigsegv_signal_handler + 248
2 libSystem.B.dylib 0x90d9c05b _sigtramp + 43
3 ??? 0xffffffff 0x0 + 4294967295
4 UIKit 0x0222e55a -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 61
5 UIKit 0x022d3b76 -[UIControl sendAction:to:forEvent:] + 66
6 UIKit 0x022d403f -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 503
7 UIKit 0x02425a6c -[_UISwitchInternalView _sendActions] + 121
8 Foundation 0x0173786d __NSFireDelayedPerform + 389
9 CoreFoundation 0x01195966 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 22
10 CoreFoundation 0x01195407 __CFRunLoopDoTimer + 551
11 CoreFoundation 0x010f87c0 __CFRunLoopRun + 1888
12 CoreFoundation 0x010f7db4 CFRunLoopRunSpecific + 212
13 CoreFoundation 0x010f7ccb CFRunLoopRunInMode + 123
14 GraphicsServices 0x04789879 GSEventRunModal + 207
15 GraphicsServices 0x0478993e GSEventRun + 114
16 UIKit 0x0222ba9b UIApplicationMain + 1175
17 ??? 0x0ebdde65 0x0 + 247324261
18 ??? 0x0ebdc550 0x0 + 247317840
19 ??? 0x0b7f7bac 0x0 + 192904108
20 ??? 0x0b7f7d86 0x0 + 192904582
21 App 0x0000a042 mono_jit_runtime_invoke + 722
22 App 0x00169f4e mono_runtime_invoke + 126
23 App 0x0016e034 mono_runtime_exec_main + 420
24 App 0x00173455 mono_runtime_run_main + 725
25 App 0x00067245 mono_jit_exec + 149
26 App 0x002116a5 main + 2837
27 App 0x00003095 start + 53
28 ??? 0x00000004 0x0 + 4
=================================================================
Got a SIGSEGV while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.
=================================================================
那么,您有解决方案的想法吗?开关的委托(delegate)方法似乎未正确注册,但我不知道出了什么问题。因为我也试过没有
if (!this.allocatedCells.Contains(indexPath.Row))
行,为了只注册一次委托(delegate),但是结果是一样的。当单元格离开屏幕时,我是否需要删除它并尝试“注销”委托(delegate)?
我希望你有一个想法,并且不要犹豫发表你对这一切的意见/建议/评论。
提前致谢!
最佳答案
好的,我发现我的代码有问题,这是由于委托(delegate)绑定(bind)到开关。实际上,我忘记注销正在离开屏幕的单元格的代表。使 ReuseableCell 出列的事实不会删除链接到单元格内容的委托(delegate) => 这导致使用引用更改的发件人调用我的 showButtonHandler(sender, args) 方法。
因此,我的代码的解决方案是将最后一部分更改为:
// Bind changing state switches' events in order to display or hide the corresponding satellite
showButton.setData(sat.Id);
favoriteButton.setData(sat.Id);
orbitButton.setData(sat.Id);
showButton.ValueChanged -= this.showButtonHandler;
orbitButton.ValueChanged -= this.orbitButtonHandler;
showButton.ValueChanged += this.showButtonHandler;
orbitButton.ValueChanged += this.orbitButtonHandler;
return cell;
}
在我的例子中,甚至没有必要在我的旧 allocatedCells 列表中注册单元格。一旦单元格被重新使用,旧的委托(delegate)将从开关中删除 (-=),并用新的引用替换 (+=)。
谢谢大家。
关于ios - Monotouch UISwitch.valueChanged 委托(delegate)目标错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11435759/
在下图中,您可以看到在列表的 StyleStringElement 中,当快速滚动时标题呈现黑色。如果我旋转 ipad,列表会重新呈现并且没问题。 有变通办法吗? 最佳答案 不确定是什么问题,但之前已
如何将 UISegmentedControl 放入 MonoTouch.Dialog header 部分? 最佳答案 是的,您可以像操作任何常规 UIView 一样操作 Section 类的 Head
我正在使用 MonoTouch 构建一个 iPhone 应用程序,它从网络服务获取数据。 我遇到的麻烦是第一个屏幕显示了国家列表。当用户选择一个国家时,它应该只从网络服务中检索该选定国家的城市列表..
我正在使用 MonoTouch 开发一款仅限 iPad 的调查应用程序。使用 monotouch.dialog (mt.d),我发现构建这些界面可以很快,这太棒了。 但是...我还发现 mt.d 只能
我有一个标准 View ,顶部有一个导航栏。我还在它自己的源文件中设置了一个 Monotouch.Dialog。我四处寻找解决方案,但似乎找不到关于如何将 MTD 添加到普通 View 的明确答案。
我需要来自 monotouch-bindings 的 facebook api 包装器,所以我从 github 下载了 monotouch-bindings 的整个包. 我无法编译 facebook
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 9 年前。 Improve this q
到目前为止,我发现的所有关于在 iPad/iPhone 应用程序中使用 Sqlite 数据库的代码示例都使用脚本在应用程序部署后创建数据库。 但是是否可以在 monotouch 中创建数据库、构建结构
我的应用程序在 MT 3.0 中运行良好。现在,当我升级时。当按钮位于 ContentView 中时,我看到错误。单击按钮时会发生崩溃。代码: public override UITableViewC
我已经决定开始编写一个 iPhone 应用程序并且来自 c# 背景,我想我会开始使用单声道进行开发。 虽然这个问题可能是主观的,但我希望您能提供一些指导。 使用这项技术开发我的应用是否安全,或者我应该
每次我尝试部署我的项目时,都会收到以下错误: Compiling to native code /Developer/MonoTouch/usr/bin/mtouch -sdkroot "/Appli
下面的代码给出了警告: Warning CS0618: MonoTouch.Dialog.Section.Add(System.Collections.Generic.IEnumerable)' is
在我用 MonoDevelop (3.0.3.5) 创建的解决方案中,我有 3 个项目: 带 UI 的 MonoTouch 项目, 带有 iOS 特定代码的 MonoTouch 库项目, 具有域模型的
我已经用模拟器简单地试用了 MT,并决定在加入开发计划的同时购买它。程序似乎可以在模拟器上运行,但当部署到我的(运行 5.1 的最新型号)iPad 上时,程序会在运行时立即崩溃。这是在做任何事情之前!
我希望能够捕捉图像(或从照片库中选择图像)并使用 Monotouch 将其上传到远程服务器。我不确定如何获取和编码图像或如何上传图像,而且我很难找到相关说明。你能帮我开始吗?谢谢你。 最佳答案 您要找
我是一名 .NET 开发人员,试图跨入 Objective-C iPhone 编程。我创建了我的第一个应用程序 - 只是一个包含多个 xib 的简单组合。 我刚刚接触到 MonoTouch,它可以让您
当 iPhone 或 iPad 应用程序抛出错误时,建议使用 Monotouch 获取报告数据的方法是什么? 最佳答案 我只是使用 Console.WriteLine 和一个围绕它的小包装器,这可以帮
在 iPhone/iPod 上的 Monotouch 中,如何检测是否有可用的互联网连接? 最佳答案 现在最好的方法是使用 Miguel de Icaza 的 GitHub 存储库中的此类: http
众所周知,Apple does not provide automatic garbage collection on the iPhone to prolong battery life 。然而据报
MonoTouch 总是与 C# 一起提及。该框架和工具集实际上仅限于 C#,还是其他 CLR 语言(如 IronRuby 和 F#)也可以工作? 最佳答案 它不仅限于 C#,但运行其他语言有一些注意
我是一名优秀的程序员,十分优秀!