我有MonoTouch应用程序,它处理来自Web服务的数据.该数据包含特定于时区的日期信息.时区为UTC +12,适用于新西兰.
我的应用程序根据当前时间显示此数据.这个问题是当应用程序在不同的时区使用时,数据无法正确显示,因为设备上的当前时间不正确.
无论设备上的区域设置/时区设置如何,如何获取UTC +12的当前日期时间?
编辑:
我根据以下答案尝试了以下代码:
TimeZoneInfo.ConvertTime (DateTime.Now, TimeZoneInfo.FindSystemTimeZoneById("Pacific/Auckland"));
Run Code Online (Sandbox Code Playgroud)
这段代码在我的电脑上工作正常但是当我在MonoTouch中运行时,我得到以下异常:
System.ArgumentException: Kind propery of dateTime is Local but the sourceTimeZone does not equal TimeZoneInfo.Local
at System.TimeZoneInfo.ConvertTime (DateTime dateTime, System.TimeZoneInfo sourceTimeZone, System.TimeZoneInfo destinationTimeZone) [0x00018] in /Developer/MonoTouch/Source/mono/mcs/class/System.Core/System/TimeZoneInfo.cs:179
at System.TimeZoneInfo.ConvertTime (DateTime dateTime, System.TimeZoneInfo destinationTimeZone) [0x00000] in /Developer/MonoTouch/Source/mono/mcs/class/System.Core/System/TimeZoneInfo.cs:173
Run Code Online (Sandbox Code Playgroud) 有没有人知道我在MonoTouch中使用的编译器指令,看看我是否在iPhone模拟器中运行?无法在任何地方找到任何信息.
谢谢!
在MonoTouch中,如何注册未捕获的异常处理程序(或类似函数)
在Obj-C中:
void uncaughtExceptionHandler(NSException *exception) {
[FlurryAnalytics logError:@"Uncaught" message:@"Crash!" exception:exception];
}
- (void)applicationDidFinishLaunching:(UIApplication *)application {
NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
[FlurryAnalytics startSession:@" "];
....
}
Run Code Online (Sandbox Code Playgroud) 我今天尝试编译我的xamarin项目,突然间我遇到了这些错误:
错误MT5210:本机链接失败,未定义符号:_mono_handle_global_vregs.请验证是否已引用所有必需的框架并且本机库已正确链接.
错误MT5210:本机链接失败,未定义符号:_mono_inst_name.请验证是否已引用所有必需的框架并且本机库已正确链接.
错误MT5210:本机链接失败,未定义符号:_mono_local_deadce.请验证是否已引用所有必需的框架并且本机库已正确链接.
错误MT5210:本机链接失败,未定义符号:_mono_print_code.请验证是否已引用所有必需的框架并且本机库已正确链接.
错误MT5210:本机链接失败,未定义符号:_mono_type_to_regmove.请验证是否已引用所有必需的框架并且本机库已正确链接.
错误MT5210:本机链接失败,未定义的符号:_type_to_eval_stack_type.请验证是否已引用所有必需的框架并且正确链接了本机库.
错误MT5202:本机链接失败.请查看构建日志.
任何人都可以指出我为什么会发生这些事情?
我将Firebase iOS sdk作为绑定项目添加到解决方案中
Swift 编译器为带有块的 swift 方法生成的 Objective-C 方法编码似乎使用了任何地方都没有记录的语法。
例如方法:
func DebugLog2(message: String) async -> String
Run Code Online (Sandbox Code Playgroud)
有方法编码:
v32@0:8@"NSString"16@?<v@?@"NSString">24
并且文档中至少有三个字符("、<和)未涵盖:>
该类NSMethodSignature也不喜欢这种编码:
[NSMethodSignature signatureWithObjCTypes:"\"NSString\"16@?<v@?@\"NSString\">24"];
Run Code Online (Sandbox Code Playgroud)
结果是:
'+[NSMethodSignaturesignatureWithObjCTypes:]: '"NSString"16@?<v@?@"NSString">24'' 中不支持类型编码规范 '"'
我尝试查看 Swift 的代码,似乎有一种叫做“扩展方法类型编码”的东西:
但我在试图找出 Swift 代码库中方法类型编码生成的位置时迷失了方向。
不回答此问题的相关问题:
示例代码:
decodeProto()
@objc
class TestClass : NSObject {
@objc
func DebugLog(message: String) -> String {
print(message)
return message
}
@objc
func DebugLog2(message: String) async -> String {
do {
try await Task.sleep(nanoseconds: 1_000_000_000)
} catch {}
print(message); …Run Code Online (Sandbox Code Playgroud) 可能非常简单,但我找不到答案 - 如何在运行时(使用MonoTouch)进行检查以确保我在iPhone模拟器中(或不是)?
谢谢
我曾经使用Objective-C语言开发iOS应用程序,并依赖该dealloc方法在我的应用程序中执行一些清理/取消注册任务.现在在MonoTouch(垃圾收集)上它不再是一个选项.
假设我有一个UIViewController添加为它的View属性的子视图MyView(UIView子类)的实例.MyView反过来注册自己从另一个管理器/全局对象接收一些事件,以便它知道如何相应地更新自己(例如:) onlineProfilesManager.Refreshed += () => <update UI with the new state>;.
只要MyView在屏幕上,一切都很好.但是我必须知道它什么时候从屏幕上删除,以便我可以MyView从事件处理程序取消注册.
在Obj-C中,这可以简单地在dealloc方法中完成,因为当屏幕改变时,UIViewController被释放 - > MyView从它的超视图中移除,然后MyView调用dealloc方法.
在Monotouch中,我不再拥有这种"确定性"流程.我试图把在一些打印语句UIViewController和MyView析构函数,但他们从来不被称为(原因是因为MyView仍注册为事件处理程序,因为我不知道何时/如何注销它,它永远不会被释放).
有谁知道在MonoTouch中处理这种情况的'模式'是什么?我想我错过了一个基本概念,并在开发我的应用程序时遇到麻烦.
提前致谢.
编辑 我正在编辑我的问题,因为看起来像我的问题的解决方案是使用弱事件模式,但我没有找到MonoTouch平台的实现.
有谁知道如何在MonoTouch中使用弱事件模式?
xamarin.ios ×6
c# ×4
ios ×2
.net ×1
events ×1
mono ×1
objective-c ×1
simulator ×1
swift ×1
xamarin ×1