标签: j2objc

处理来自应用程序的非Ui部分的导航?

注意:当我谈论App后端时,我不是指服务器后端.App后端是应用程序的一部分.它是应用程序的非ui部分.

我有一个代码设计问题.使用j2objc Java用作iOS应用程序的后端,前端仍然是Objective-C.

哪个部分(前端或后端)应控制此模型中的导航?

考虑以下.最初的ViewController已加载.用户点击了一个按钮.以下是两种可能的情况:

  1. 前端接收手势并打开请求的ViewController

  2. 前端接收手势并将动作报告给Java后端.Java后端决定下一个要打开的页面,并告诉前端要显示哪个ViewController.

对我来说,第二种解决方案在代码分离方面似乎更有意义.但是我遇到了一个问题.假设您的应用程序中有以下ViewController结构:

  • 起始:UIViewController主要: UINavigationViewController
  • > Main-TabPage1: UIPageViewController
  • > Main-TabPage2: UIPageViewController
  • > Main-TabPage3:UIPageViewController设置: UIViewController

如果您在应用程序的级别导航,则很简单.您只需告诉前端打开Startpage,Main或Settings.但是,有什么用途点击按钮从"起始页"或从Main> Main-TabPage1转到Main> Main-TabPage3.您必须执行以下操作:

  • 万一你在Startpage:你必须告诉前端它应该审查Main,然后是Main TabPage3.
  • 万一你在Main> Main-TabPage1:你必须告诉前端它应该只显示Main-TabPage3.

你看到这样一个简单的页面方案的事件揭示了Java后端的ViewController似乎有很多需要考虑的案例.

这是从Java后端泄露视图的有效方式,还是看到更好的方法?

java objective-c ios swift j2objc

18
推荐指数
1
解决办法
508
查看次数

如何在跨平台应用程序中处理基于UI的导航?

假设您有一个跨平台应用程序.该应用程序在Android和iOS上运行.您在两个平台上的共享语言都是Java.通常,您将使用Java编写业务逻辑,并使用Java(适用于Android)和Objective-C(适用于iOS)编写所有UI特定部分.

通常,当您在跨平台,跨语言应用程序中实现MVP模式时,您将拥有Java中的Model和Presenter,并为您的演示者提供了一个Java界面.这样,您的共享Java演示者可以与您在平台特定部分上使用的任何视图实现进行通信.

让我们假设我们想要编写一个带有Java部分的iOS应用程序,以后可以使用相同的Android应用程序进行共享.以下是设计的图形表示:

在此输入图像描述

在左侧有Java部分.在Java中,您可以编写模型,控制器以及视图界面.使用依赖注入进行所有连线.然后可以使用J2objc将Java代码转换为Objective-C .

在右侧,您有Objective-C部分.在这里,您UIViewController可以实现Java接口,这些接口转换为ObjectiveC协议.

问题:

我正在努力的是如何进行视图之间的导航.假设你在UIViewControllerA上,然后点击一个按钮,它会带你到UIViewControllerB.你会怎么做?

情况1:

在此输入图像描述

您将按钮点击报告给UIViewControllerA的Java ControllerA(1),Java ControllerA调用链接到UIViewControllerB(3)的Java ControllerB(2).然后,您遇到的问题是Java Controller端不知道如何在Objective-C View层次结构中插入UIViewControllerB.您无法从Java端处理此问题,因为您只能访问View接口.

案例2:

在此输入图像描述

您可以转换到UIViewControllerB,无论它是模态还是UINavigationController或其他(1).然后,首先需要正确的UIViewControllerB实例,该实例绑定到Java ControllerB(2).否则,UIViewControllerB无法与Java ControllerB(2,3)进行交互.当您拥有正确的实例时,您需要告诉Java ControllerB已经显示了View(UIViewControllerB).

我仍在努力解决如何处理不同控制器之间导航的问题.

如何在不同控制器之间建模导航并适当地处理跨平台视图更改?

android objective-c ios swift j2objc

12
推荐指数
2
解决办法
740
查看次数

警告:紧急:为watchOS模拟器构建,但链接为iOS构建的目标文件

在集成我的j2objc转换的java库时,我收到了这条消息.

ld:警告:紧急:为watchOS模拟器构建,但链接在为iOS构建的目标文件(/Users/admin/Documents/j2objc/dist/lib/libjre_emul.a(IOSArray.o))中.注意:将来这将是一个错误.

我不明白我的代码是否适用于真正的watchOS设备?或者这只是一个仅在模拟器中运行的i386构建?在这种情况下我需要做什么?

objective-c ios j2objc watchos-2 watchos-simulator

11
推荐指数
0
解决办法
540
查看次数

在Android中实现Model-View-Presenter的困难

Model-View-Presenter(MVP)是一种众所周知的GUI应用程序设计模式.对于Android,在普通Java模块中实现业务逻辑有助于测试而无需Android模拟器.

但是,由于Android应用程序GUI的特殊要求,我在Android上实现模式时遇到了困难:

  • 可以在任何时候销毁活动(来电,用户按下主页按钮,......),并且在重新创建时,它应该处于与其离开时完全相同的状态.这与大多数其他GUI应用程序不同.

  • 活动可以经历许多生命周期状态.可能会暂停,在这种情况下,不应修改活动的UI.例如,如果某些数据在后台加载,则如果它处于暂停状态,则无法将其传递给MVP(Activity)的View部分.同样,这是一个不寻常的要求.

我已经阅读了MVP for Android的博客文章并查看了示例源代码.我试图通过使用MVP模式实现的最终目标是能够使用转换器j2objc将所有业务逻辑转换为Objective-C ,这样在iOS上实现相同的应用程序时可以重用业务逻辑.

有没有人成功实现了Android的MVP模式,在这种情况下,我错过了什么?

mvp android android-activity j2objc

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

使用J2ObjC和GSON库将Swift类序列化为JSON

我是iOS的新手,从Android开发转向.

我们有一个Android应用程序,它有几个库,我们使用J2ObjC转换为Objective C.

我已经逐渐将这些图书馆带到了现在,所以很好.

但是,在翻译谷歌的GSON库后,我遇到了一个问题,如果我尝试使用翻译的方法,toJsonWithId我会遇到问题:

    let gson = ComGoogleGsonGson()
    let swiftTest = GsonSwiftTest()
    swiftTest.name = "Ricky"
    print(gson.toJsonWithId(swiftTest))
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

libc ++ abi.dylib:以JavaLangAssertionError类型的未捕获异常终止

进一步显示:

由于未捕获的异常'JavaLangAssertionError'而终止应用程序,原因:'未知的Java类型编码'

我的Swift课程是:

import Foundation

@objc
public class GsonSwiftTest : NSObject {

   var name:String?

}
Run Code Online (Sandbox Code Playgroud)

如果我在我的Swift项目中使用Objective C类,将它添加到桥接头并使用Objective C类它可以正常工作.

我相信这是我的一个误解,但我找不到为什么这不起作用的答案.检查J2ObjC源代码显示无法找到类的类型时引发错误.

如果有人可以帮助解释这个问题的原因,我们将不胜感激.

谢谢!

objective-c gson ios swift j2objc

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

在Swift中用J2objc翻译的Access Enum

我使用J2objc将Java转换为Objective-C.这个代码我用一个桥接头来使它在Swift中可用.这是我翻译的Java Enum:

public enum BTestType {

  Type1, Type2, Type3;

}
Run Code Online (Sandbox Code Playgroud)

在Objective-C中,我得到以下头文件(我跳过模块文件):

#ifndef _BISBTestType_H_
#define _BISBTestType_H_

#include "J2ObjC_header.h"
#include "java/lang/Enum.h"

typedef NS_ENUM(NSUInteger, BISBTestType) {
  BISBTestType_Type1 = 0,
  BISBTestType_Type2 = 1,
  BISBTestType_Type3 = 2,
};

@interface BISBTestTypeEnum : JavaLangEnum < NSCopying >

#pragma mark Package-Private

+ (IOSObjectArray *)values;
FOUNDATION_EXPORT IOSObjectArray *BISBTestTypeEnum_values();

+ (BISBTestTypeEnum *)valueOfWithNSString:(NSString *)name;
FOUNDATION_EXPORT BISBTestTypeEnum *BISBTestTypeEnum_valueOfWithNSString_(NSString *name);

- (id)copyWithZone:(NSZone *)zone;

@end

J2OBJC_STATIC_INIT(BISBTestTypeEnum)

FOUNDATION_EXPORT BISBTestTypeEnum *BISBTestTypeEnum_values_[];

#define BISBTestTypeEnum_Type1 BISBTestTypeEnum_values_[BISBTestType_Type1]
J2OBJC_ENUM_CONSTANT_GETTER(BISBTestTypeEnum, Type1)

#define BISBTestTypeEnum_Type2 BISBTestTypeEnum_values_[BISBTestType_Type2]
J2OBJC_ENUM_CONSTANT_GETTER(BISBTestTypeEnum, Type2)

#define BISBTestTypeEnum_Type3 BISBTestTypeEnum_values_[BISBTestType_Type3]
J2OBJC_ENUM_CONSTANT_GETTER(BISBTestTypeEnum, Type3) …
Run Code Online (Sandbox Code Playgroud)

java objective-c ios swift j2objc

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

在文件夹引用模式下添加文件时,Xcode找不到头文件

我正在尝试使用文件夹引用模式将许多 Objective-C 文件添加到我的 Swift 项目中,这意味着当我将文件拖放到项目中时,我选择“创建文件夹引用”。

这是因为我所有的 obj-c 文件都使用#include "/folder/folder/folder/"example. 这些文件是用j2objc生成的项目生成的。

现在我的问题是当我想要#import或Xcode 中的#include某些.h文件myproject-Bridging-Header.h找不到头文件时。我用#import "/folder/folder/folder/"类似生成的文件,但没有机会。

$(PROJECT_DIR)/在构建设置 - 搜索标头路径中添加,但它确实需要完全像$(PROJECT_DIR)/folder/folder/folder/. 有什么方法可以设置主文件夹和 Xcode 查找子文件夹吗?或者我需要单独写每个路径?

objective-c swift j2objc

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

Google 的 j2objc 可以处理和转换二进制 JAR 文件吗?

我希望开始进行移动开发(特别是 iOS),虽然我通常很擅长学习语言,但 Objective-C 几乎每时每刻都让我感到困惑。所以,看看 j2objc(因为我已经知道 Java),我认为它可能符合我正在寻找的东西。

不过,我的问题非常简单:转换器能否正确处理我的源代码引用(例如,仅二进制(字节码)JAR 文件中的 Apache Commons 代码)的情况?

java objective-c ios j2objc

3
推荐指数
1
解决办法
2396
查看次数

在j2objc中确定当前平台

使用j2objc时,确定当前平台(Android与iOS)的最佳方法是什么?

或者更一般的问题:如何在Android和iOS上使用不同的代码,例如在处理数据库访问或网络时?

j2objc

3
推荐指数
1
解决办法
279
查看次数

如何将整个文件夹或包从Java转换为Objective-C?

我之前使用过旧版本的Google Java到Objective-C(J2ObjC)转换器(即版本0.5.2),并且可以直接将整个Java文件夹转换为等效的Objective-C文件(并保留这样做的目录结构).我只需要运行以下shell可执行文件:

$ ./run.sh —-preservedirs <path to input folder>
Run Code Online (Sandbox Code Playgroud)

我刚刚下载了最新版本的J2ObjC(即版本0.9.1),并且从入门页面或其他地方不清楚如何使用'j2obc'翻译整个Java文件文件夹而不是单个Java文件可执行文件." 入门"页面中提供的唯一示例是翻译单个Java文件,该文件在其他地方没有依赖项/导入,如下所示:

$ ./j2objc Hello.java
Run Code Online (Sandbox Code Playgroud)

假设我有一个名为'input'的文件夹,其中包含所有要翻译的子包和Java文件的'com'包,任何人都可以提供一个如何翻译整个包的示例吗?

java objective-c j2objc

3
推荐指数
1
解决办法
1716
查看次数