小编Jus*_*ain的帖子

加载页面后,无法在UIWebview中更改UserAgent

我的IOS应用程序中有几个UIWebView.有时,用户可能需要从任何给定URL的移动站点更改为桌面站点.我通过更改UserAgent使用欺骗来做到这一点:

 + (void) startSpoofingUserAgent
 {
     [[NSUserDefaults standardUserDefaults] registerDefaults:@{ @"UserAgent" : @"Desktop" }];
     [[NSUserDefaults standardUserDefaults] synchronize];
 }
Run Code Online (Sandbox Code Playgroud)

我也有一种杀死欺骗的方法:

 + (void)stopSpoofingUserAgent
 {
      NSDictionary *registeredDefaults = [[NSUserDefaults standardUserDefaults] volatileDomainForName:NSRegistrationDomain];
      if ([registeredDefaults objectForKey:@"UserAgent"] != nil)
      {
          NSMutableDictionary *mutableCopy = [NSMutableDictionary dictionaryWithDictionary:registeredDefaults];
          [mutableCopy removeObjectForKey:@"UserAgent"];
          [[NSUserDefaults standardUserDefaults] setVolatileDomain:mutableCopy forName:NSRegistrationDomain];
          [[NSUserDefaults standardUserDefaults] synchronize];
      }
}
Run Code Online (Sandbox Code Playgroud)

然后,我让用户可以通过按钮从桌面到移动和移动到桌面进行更改.然后我用这段代码重新加载URL:

        self.webView.delegate = self;
        self.webView.scalesPageToFit = YES;
        self.webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

        //Create a URL object.
        NSURL *url = [NSURL URLWithString:self.convertedURL];

        //URL Request Object
        if(self.defaultToDesktopSite)
        {
            [MINNetworkingUtils startSpoofingUserAgent];
        }
        else
        {
            [MINNetworkingUtils …
Run Code Online (Sandbox Code Playgroud)

uiwebview ios

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

如何在 Flutter 的 Dialogs 中访问 Provider 提供者

Provider 包使用InheritedWidget. 当我在对话框中时想访问提供程序时,这是一个问题。如果我使用加载对话框

 showDialog(... builder: (context) => MyDialog);
Run Code Online (Sandbox Code Playgroud)

我无法访问任何东西,InheritedWidget因为我的对话框不是主小部件树的一部分。这也意味着我无法访问我的 Provider 提供商,对吗?

我的问题是:如果它不是主应用程序小部件树的一部分,我如何在对话框中访问我的提供程序?

final firebaseAuth = Provider.of<FirebaseAuth>(context);
Run Code Online (Sandbox Code Playgroud)

我在使用BLoCs. 如果我尝试在对话框中通过 检索它们InheritedWidget,它们将失败。我已经通过BLoC在构造函数中传递了来解决这个问题,但这似乎违背了InheritedWidgets.

flutter inherited-widget flutter-provider

16
推荐指数
3
解决办法
9586
查看次数

无法将Enterprise应用程序安装到具有未注册UUID的设备

我创建了一个通用应用程序 我正在尝试使用我们的企业开发人员许可证分发应用程序.

问题是:如果我在已注册UUID的设备上安装该应用程序,该应用程序安装正常.如果我"尝试"在没有注册UUID的设备上安装应用程序,则安装无法完成.我收到消息"无法下载应用程序"此时无法安装"我的应用程序".

这是我得到的日志:

Sep  5 10:47:07 my-iPad installd[54] <Error>: 0x2c3000 handle_install: Install of "/var/mobile/Media/PublicStaging/My App.app" requested by mobile_installation_proxy
Sep  5 10:47:08 my-iPad installd[54] <Error>: 0x2c3000 MobileInstallationInstall_Server: Installing app com.mysite.My-App
Sep  5 10:47:08 my-iPad installd[54] <Error>: profile not valid: 0xe8008012
Sep  5 10:47:08 my-iPad installd[54] <Error>: 0x2c3000 install_embedded_profile: Could not install embedded profile: 0xe8008012
Sep  5 10:47:08 my-iPad installd[54] <Error>: Sep  5 10:47:08  SecTrustEvaluate  [leaf CriticalExtensions IssuerCommonName]
Sep  5 10:47:09 my-iPad installd[54] <Error>: 0x2c3000 verify_signer_identity: MISValidateSignatureAndCopyInfo failed for /var/tmp/install_staging.xjOLHU/My Appp.app/My …
Run Code Online (Sandbox Code Playgroud)

iphone ipad ios

13
推荐指数
1
解决办法
2万
查看次数

如何使用SwiftyJSON从文件中保存/检索字典

我正试图从Objc转换到swift并且过得更好.

我有一个带字典的课:

 collaborationDictionary:[String:Set<String>]
Run Code Online (Sandbox Code Playgroud)

我试图在/从文件中写入/读取这个字典,但似乎无法让它工作.我必须使用以下JSON结构保存字典,我必须使用SwiftyJSON.

 { "Collaborations" : {
          "5604" : [
              "whiteboard.png",
              "VID_20161123_135117.3gp",
              "Photo_0.jpeg"]
          "5603" : [
              "VID_20161123_135117.3gp"],
          "5537" : [
              "Screenshot_20151212-132454.png",
              "VID_20161202_083205.3gp",
              "VID_20161123_135117.3gp",
              "Photo_0.jpeg",
              "Screenshot_20151212-132428.png",
              "Screenshot_20151212-132520.png",
              "IMG_20161017_132105.jpg",
              "whiteboard.png"]}
 }
Run Code Online (Sandbox Code Playgroud)

我找到/检索文件或编写文件没有任何实际问题.我只是不知道如何手动加载SwiftyJSON.我需要在顶部有一个名为"Collaborations"的JSON对象.它需要包含协作ID字典(5604,5603 ......).每个协作都包含一个字符串数组(文件名).我包含了我用来读/写文件的代码,但我需要SwiftyJSON库的帮助.

这是我用来存储上述数据的成员数据成员:

这些是我需要完成的功能:

     private var collaborationDictionary:[String:Set<String>] = [:]


  func getUploadedFileSet() {
    collaborationDictionary = [:]
    let documentsURL = URL(string: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])
    let appURL = documentsURL?.appendingPathComponent(APP_DISTINGUISHED_NAME)
    let jsonFileURL = appURL?.appendingPathComponent(UPLOADED_ITEMS_DB_JSON)

    if FileManager.default.fileExists(atPath: (jsonFileURL?.absoluteString)!) {
        do {
            let data = try Data(contentsOf: jsonFileURL!, options: .alwaysMapped)
            let json = JSON(data: data)

            // …
Run Code Online (Sandbox Code Playgroud)

ios swift swifty-json

10
推荐指数
1
解决办法
2548
查看次数

弹出片段时,Android操作栏项仍然存在

我正在使用支持操作栏.我也在使用片段.通常,我使用导航抽屉更改片段,一切正常.每个片段都可以更改操作栏项.当我更改为新片段时,将删除更改(新按钮).

这是我的问题.在一个实例中,我替换片段并将现有片段添加到后栈.当我回到上一个片段时,操作栏仍然包含前一个片段中的项目.

示例:1)片段1加载片段2并将片段1放在后面的堆栈上2)片段2在操作栏中放置几个​​新按钮3)片段2退出现在我看到片段1和2中的操作栏项目

我在另一个位置使用另外两个片段执行相同的基本操作,并且没有相同的问题.我可以在两个实现之间找出的唯一区别是第二个片段与操作栏交互的方式.

在工作案例中,片段2加载项目使onCreateMenuOptions中的菜单膨胀.这很好用.

在NOT工作情况下,片段2不会使菜单膨胀,而是使用自定义视图:

         // Set action bar custom view and display options.
    MINMainActivity.getSharedInstance().getSupportActionBar().setCustomView(R.layout.custom_action_bar_viewer);
    MINMainActivity.getSharedInstance().getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_HOME_AS_UP | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_USE_LOGO);
    MINMainActivity.getSharedInstance().getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.action_bar_bg));
Run Code Online (Sandbox Code Playgroud)

这是我能找到的唯一区别.我错过了什么吗?(显然)但问题是什么?

用于从片段1加载片段2的代码是:

 MINMainActivity.getSharedInstance().mDrawerToggle.setDrawerIndicatorEnabled(false);

                        // Load the PDF fragment
                        MINPDFTronFragment fragment = new MINPDFTronFragment();
                        fragment.albumItem = albumItem;
                        getFragmentManager().beginTransaction()
                                .replace(R.id.content_frame, fragment)
                                .addToBackStack(null)
                                .commit();
Run Code Online (Sandbox Code Playgroud)

用于片段2的onCreate代码是:

     // ***************************************************************************************************
//
//  onCreate
//
// ***************************************************************************************************
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    //MINMainActivity.getSharedInstance().supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_BAR_OVERLAY);
    setRetainInstance(true);
    setHasOptionsMenu(true);
    getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
}
Run Code Online (Sandbox Code Playgroud)

新编辑:

这些是在操作栏上执行工作的两种方法.这里的第一部分是Fragment 1的代码.片段1是启动Fragment 2并将其自身置于backstack上的片段:

     // ***************************************************************************************************
//
//  onCreateOptionsMenu
//
// ***************************************************************************************************
@Override
public …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-actionbar-compat

9
推荐指数
1
解决办法
1704
查看次数

无法使用RecyclerView在DrawerLayout中的标题和项目之间放置浮动操作按钮(FAB)

我无法让浮动操作按钮(FAB)出现在正确的位置.我希望它出现在标题和导航抽屉中的第一个项目之间.

在此输入图像描述

目前,我已经将它显示在标题的右下角而不是第1和第2个元素之间的行顶部(第一个元素=标题和第二个元素= recyclerview中的第一个项目).

我的应用正在使用以下appcompat项:

  • 程序兼容性-V7:23.0.0
  • recyclerview-V7:23.0.0
  • 设计:23.0.0

我正在使用导航抽屉,但我无法使用NavigationView,因为我需要自定义项目条目而不加载简单的菜单.

如您所知,抽屉实际上不是两种不同的控件.标题实际上是RecyclerView中的'0'元素.我不知道这是否有所作为.

这是我在RecyclerView中的标题/"0视图"的当前xml:

     <?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="@dimen/navdrawer_image_height">


    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/navDrawerHeaderView"
        android:layout_width="match_parent"
        android:layout_height="@dimen/navdrawer_image_height">

        <ImageView
            android:id="@+id/navdrawer_image"
            android:layout_width="wrap_content"
            android:layout_height="@dimen/navdrawer_image_height"
            android:contentDescription="@string/cd_navdrawer_image"
            android:scaleType="centerCrop"
            android:src="@drawable/bg_material_design" />

        <de.hdodenhof.circleimageview.CircleImageView
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/app_image"
            android:layout_width="@dimen/navdrawer_user_picture_size"
            android:layout_height="@dimen/navdrawer_user_picture_size"
            android:src="@drawable/ic_launcher"
            android:layout_marginTop="16dp"
            android:layout_marginLeft="16dp"
            android:layout_marginStart="16dp"
            app:border_width="2dp"
            app:border_color="#FF000000"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/appNameTextView"
            android:text="App Name"
            android:textStyle="bold"
            android:layout_marginLeft="16dp"
            android:layout_marginStart="16dp"
            android:layout_marginBottom="16dp"
            android:layout_alignParentBottom="true"
            android:textColor="@android:color/white"/>

    </RelativeLayout>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:clickable="true"
        android:src="@drawable/button_account"
        app:layout_anchor="@id/navDrawerHeaderView"
        app:layout_anchorGravity="bottom|right|end"
        app:elevation="4dp"/>

</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

我想我可能在错误的位置/文件中有FAB.这是抽屉的xml.

     <?xml version="1.0" encoding="utf-8"?>

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawerLayout"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:fitsSystemWindows="true">

    <!-- Content layout …
Run Code Online (Sandbox Code Playgroud)

android floating-action-button

9
推荐指数
1
解决办法
2491
查看次数

用于在Firebase for Android中创建网址深层链接的应用代码是什么

我正在尝试在我的Android应用中使用Firebase动态链接.我对用于构建深层链接的其中一个参数感到困惑.

在演示应用程序中,它调用api来创建用作深层链接的URI.作为其中的一部分,它使用"应用程序代码"作为授权方法的一部分.

public Uri buildDeepLink(@NonNull Uri deepLink, int minVersion, boolean isAd) {
    // Get the unique appcode for this app.
    String appCode = getString(R.string.app_code);

    // Get this app's package name.
    String packageName = getApplicationContext().getPackageName();

    // Build the link with all required parameters
    Uri.Builder builder = new Uri.Builder()
            .scheme("https")
            .authority(appCode + ".app.goo.gl")
            .path("/")
            .appendQueryParameter("link", deepLink.toString())
            .appendQueryParameter("apn", packageName);

    // If the deep link is used in an advertisement, this value must be set to 1.
    if (isAd) {
        builder.appendQueryParameter("ad", "1");
    }

    // …
Run Code Online (Sandbox Code Playgroud)

android deep-linking firebase-dynamic-links

9
推荐指数
1
解决办法
2478
查看次数

如何在Flutter中从Cloud Firestore加载数组和对象

我有一类具有几个嵌入式数组以及几个对象的类。我正在使用Flutter,无法弄清楚如何读写Cloud Firestore。

我可以读写默认类型的数据成员,例如String和Int。这是我试图用来从DocumentSnapshot实例化对象的构造函数:

 class GameReview {
   String name;
   int howPopular;
   List<String> reviewers;
 }

 class ItemCount {
   int itemType;
   int count;

   ItemCount.fromMap(Map<dynamic, dynamic> data)
       : itemType = data['itemType'],
         count = data['count'];
 }

 class GameRecord {
   // Header members
   String documentID;
   String name;
   int creationTimestamp;
   List<int> ratings = new List<int>();
   List<String> players = new List<String>();
   GameReview gameReview;
   List<ItemCount> itemCounts = new List<ItemCount>();

   GameRecord.fromSnapshot(DocumentSnapshot snapshot)
       : documentID = snapshot.documentID,
         name = snapshot['name'],
         creationTimestamp = snapshot['creationTimestamp'],
         ratings = snapshot['ratings'], // ERROR on run
         players …
Run Code Online (Sandbox Code Playgroud)

flutter google-cloud-firestore

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

将IOS核心数据与Web服务同步?

这是我的问题:

  • 我想使用核心数据 - 速度和连接问题来构建我的IOS应用程序.存储在核心数据中的数据来自SQLServer数据库,我可以通过尚未定义的Web服务访问该数据库.
  • 存储在核心数据中的数据的任何更改都需要通过Web服务与SQLServer同步.此外,我需要缓冲因连接问题而无法同步的更改.
  • 我还需要使用服务器上发生的任何更改来更新核心数据.这可能发生在用户首选项中设置的计划中.

我探索过的解决方案:

  • 使用NSIncrementalStoreclass(IOS 5中的新增功能).我对这完全是什么感到困惑,但听起来很有希望.据我所知,你的子类NSIncrementalStore允许你拦截常规的核心数据API调用.然后,我可以将信息传递给核心数据,并通过Web服务将其与外部数据库同步.我可能完全错了.但假设我是对的,如果与互联网的连接断开,我将如何同步增量?
  • AFIncrementalStore-这是一个关子类的NSIncrementalStore使用AFNetworking做网络服务部分.
  • RestKit - 我有点担心这个API的活跃程度,似乎正在经历向块功能的过渡.有没有人广泛使用过这个?

我倾向于AFIncrementalStore使用(似乎是)更标准的方法.问题是,我可能完全不知道NSIncrementalStore究竟是什么.

一些示例代码或教程的链接会很棒!

web-services core-data ios5

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

将操作栏更改为从Fragment中叠加

我有一个片段(片段1)被另一个片段(片段2)取代.片段1放置在堆栈上.我正在使用兼容模式(而不是ActionBarSherlock).

这是我的问题.我希望操作栏在某些片段中显示为叠加,但在其他片段中则不显示.具体来说,当显示片段2时,我希望它显示在叠加层中,然后在片段2退出后返回到正常操作栏.

片段1具有始终可见的常规操作栏.但是,当我用Fragment 2替换Fragment 1时,我需要在5秒后隐藏动作栏.如果有触摸事件,则会再次显示操作栏.这一切都很好,但是,每次隐藏或显示操作栏时,都会重新绘制片段2.因此,我想让片段2中的操作栏显示为叠加层.

我知道我可以更改动作栏覆盖,但我不知道如何从片段内以编程方式执行此操作.我不想为每个片段更改它,只是片段2.

思路?????

android android-fragments android-actionbar-compat

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