小编Rol*_*nge的帖子

无论设备时区如何,都可以获取特定TimeZone的DateTime.Now?

我有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)

.net c# mono xamarin.ios

9
推荐指数
3
解决办法
2万
查看次数

适用于iPhone模拟器的MonoTouch编译器指令

有没有人知道我在MonoTouch中使用的编译器指令,看看我是否在iPhone模拟器中运行?无法在任何地方找到任何信息.

谢谢!

c# compiler-directives xamarin.ios

8
推荐指数
1
解决办法
712
查看次数

MonoTouch:uncaughtExceptionHandler?

在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)

c# exception-handling xamarin.ios

6
推荐指数
1
解决办法
2138
查看次数

xamarin中的本地链接错误

我今天尝试编译我的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作为绑定项目添加到解决方案中

xamarin.ios ios xamarin

6
推荐指数
1
解决办法
9057
查看次数

swift 块的 `objc_method_description.types` 的格式是什么?

Swift 编译器为带有块的 swift 方法生成的 Objective-C 方法编码似乎使用了任何地方都没有记录的语法。

例如方法:

func DebugLog2(message: String) async -> String
Run Code Online (Sandbox Code Playgroud)

有方法编码:

v32@0:8@"NSString"16@?<v@?@"NSString">24

并且文档中至少有三个字符("<和)未涵盖:>

https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html

该类NSMethodSignature也不喜欢这种编码:

[NSMethodSignature signatureWithObjCTypes:"\"NSString\"16@?<v@?@\"NSString\">24"];
Run Code Online (Sandbox Code Playgroud)

结果是:

'+[NSMethodSignaturesignatureWithObjCTypes:]: '"NSString"16@?<v@?@"NSString">24'' 中不支持类型编码规范 '"'

我尝试查看 Swift 的代码,似乎有一种叫做“扩展方法类型编码”的东西:

https://github.com/apple/swift/blob/c2fc7ee9e72e9a39854548e3202c667e4934dc65/test/IRGen/objc_methods.swift#L13-L14

但我在试图找出 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)

objective-c objective-c-runtime method-signature swift

6
推荐指数
1
解决办法
133
查看次数

MonoTouch运行时测试,看它是否在模拟器中运行

可能非常简单,但我找不到答案 - 如何在运行时(使用MonoTouch)进行检查以确保我在iPhone模拟器中(或不是)?

谢谢

c# simulator xamarin.ios

5
推荐指数
1
解决办法
869
查看次数

MonoTouch中的弱事件模式

我曾经使用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中,我不再拥有这种"确定性"流程.我试图把在一些打印语句UIViewControllerMyView析构函数,但他们从来不被称为(原因是因为MyView仍注册为事件处理程序,因为我不知道何时/如何注销它,它永远不会被释放).

有谁知道在MonoTouch中处理这种情况的'模式'是什么?我想我错过了一个基本概念,并在开发我的应用程序时遇到麻烦.

提前致谢.


编辑 我正在编辑我的问题,因为看起来像我的问题的解决方案是使用弱事件模式,但我没有找到MonoTouch平台的实现.

有谁知道如何在MonoTouch中使用弱事件模式

events weak-references xamarin.ios ios

4
推荐指数
1
解决办法
1378
查看次数