我尝试使用Swift类从我的ObjectiveC AppDelegate访问NSNumber值但是它在Swift方面不断返回nil - 但是它在Objective C类中填充(我相信它是由于我在Swift中调用它 - 即使它是使用代码完成找到的 - 由于某种原因它在两者之间传递时仍然会丢失)。
任何建议都表示赞赏。
...
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)notification
{
theNotification = notification;
NSDictionary *aps = (NSDictionary *)[notification objectForKey:@"aps"];
NSNumber *chatId = [aps objectForKey:@"chatId"];
}
...
...
@property (nonatomic) NSNumber* chatId;
...
class func clientChatSendMessage(_ chatId: NSNumber, message: String, completionHandler: @escaping (Data?, NSError?) -> ()) -> URLSessionTask {
let oCchatId: AppDelegate = AppDelegate()
let chatSessionId:NSNumber = oCchatId.chatId
答案 0 :(得分:1)
在代码中创建新变量NSNumber *chatId = [aps objectForKey:@"chatId"];
试试这个:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)notification
{
theNotification = notification;
NSDictionary *aps = (NSDictionary *)[notification objectForKey:@"aps"];
self.chatId = [aps objectForKey:@"chatId"];
}
编辑
正如 Caleb 在评论中所说
我认为AppDelegate的新实例也是一个问题。这应该 可以通过UIApplication.shared.delegate.chatId
访问
所以你也需要改变它
class func clientChatSendMessage(_ chatId: NSNumber, message: String, completionHandler: @escaping (Data?, NSError?) -> ()) -> URLSessionTask {
let oCchatId: AppDelegate = UIApplication.shared.delegate() as! AppDelegate
let chatSessionId:NSNumber = oCchatId.chatId