小编Jef*_*eff的帖子

如何在不使用Web应用程序的情况下完全使用JavaScript编写iPhone应用程序?

我不想花时间学习Obj-C.我花了7年多的时间做网络应用程序编程.难道不应该有办法使用WebView,只需在javascript中编写整个应用程序,从项目资源中提取文件?

javascript objective-c ios

84
推荐指数
3
解决办法
4万
查看次数

检测NSDictionary中的Null值

我有一个NSDictionary来自API服务器的JSON响应.有时候这个字典中的键的值是Null

我试图获取给定的值并将其放入表格单元格的详细文本中以供显示.

问题在于,当我试图将值强制转换NSString为崩溃时,我认为这是因为我试图强制Null转换为字符串.

这样做的正确方法是什么?

我想做的是这样的:

cell.detailTextLabel.text = sensor.objectForKey( "latestValue" ) as NSString
Run Code Online (Sandbox Code Playgroud)

这是一个字典的例子:

Printing description of sensor:
{
    "created_at" = "2012-10-10T22:19:50.501-07:00";
    desc = "<null>";
    id = 2;
    "latest_value" = "<null>";
    name = "AC Vent Temp";
    "sensor_type" = temp;
    slug = "ac-vent-temp";
    "updated_at" = "2013-11-17T15:34:27.495-07:00";
}
Run Code Online (Sandbox Code Playgroud)

如果我只需要在条件中包装所有这些,那很好.我只是无法弄清楚条件是什么.回到Objective-C世界,我会比较,[NSNull null]但这似乎不适用于Swift.

ios nsnull swift

39
推荐指数
5
解决办法
5万
查看次数

来自NSSet的NSArray - 我必须自己排序吗?

我在NSSet中有数据,我需要将它放入NSArray中.

我是否需要自己排序(再次,这来自Core Data)或者我可以按排序顺序将其排除吗?

sorting iphone nsarray nsset

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

Swift中Byte数组的NSData

我正在尝试NSData var从一个字节数组创建一个.

在Obj-C中我可能会这样做:

NSData *endMarker = [[NSData alloc] initWithBytes:{ 0xFF, 0xD9 }, length: 2]

我无法弄清楚Swift中的工作等价物.

ios swift

32
推荐指数
5
解决办法
5万
查看次数

如何直接从我的应用程序启动Appstore应用程序

我现在使用了几个应用程序直接从应用程序启动itunes商店.我甚至在2.1 iPod 2G上使用了一些.

我知道2.1中有一个错误阻止appstore链接在safari中工作,但不知何故人们直接启动appstore,甚至没有通过safari启动.

你怎么做到这一点?它是一个未记录的openURL功能吗?

iphone app-store

26
推荐指数
5
解决办法
3万
查看次数

如何让CAEmitterCell在其生命周期结束时淡出?

我正在制作一些粒子,而不是在他们一生的最后消失,我希望它们淡出.

我有一个CAEmitterCell生命周期为35.0 的定义.我不希望粒子在粒子寿命的整个持续时间内淡出.我只想让它在最后淡出.也许最后2或3秒.

core-animation ios

15
推荐指数
2
解决办法
2996
查看次数

在rails引擎视图中缺少设计路由助手

我正在构建一个名为Engrave的Rails引擎.

我的发动机安装如下:

# Routes.rb of the host app
mount Engrave::Engine => "/engrave", :as => "engrave_engine"
Run Code Online (Sandbox Code Playgroud)

在这个引擎中,我有一个名为"PostsController"的控制器.当我导航到这个控制器来查看这样的帖子时:/engrave/posts/1我收到此错误:

undefined local variable or method `new_user_session_path'
Run Code Online (Sandbox Code Playgroud)

引擎中的PostsController继承自引擎控制器,它继承自应用程序控制器,如下所示:

module Engrave
  class PostsController < ApplicationController
  ...
end

class Engrave::ApplicationController < ApplicationController
end
Run Code Online (Sandbox Code Playgroud)

new_user_session_path由devise定义,我设置如下:

devise_for :users
Run Code Online (Sandbox Code Playgroud)

对new_user_session_path的调用layouts/application.html.erb位于主机应用程序的模板文件中

我无法弄清楚为什么这个路由助手在这种情况下不可用.我究竟做错了什么?

ruby-on-rails rails-engines devise

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

如何在Swift 4中实现JSON数据的多态解码?

我正在尝试从API端点返回的数据呈现视图。我的JSON看起来(大致)如下:

{
  "sections": [
    {
      "title": "Featured",
      "section_layout_type": "featured_panels",
      "section_items": [
        {
          "item_type": "foo",
          "id": 3,
          "title": "Bisbee1",
          "audio_url": "http://example.com/foo1.mp3",
          "feature_image_url" : "http://example.com/feature1.jpg"
        },
        {
          "item_type": "bar",
          "id": 4,
          "title": "Mortar8",
          "video_url": "http://example.com/video.mp4",
          "director" : "John Smith",
          "feature_image_url" : "http://example.com/feature2.jpg"
        }
      ]
    }    
  ]
}
Run Code Online (Sandbox Code Playgroud)

我有一个对象,表示如何在我的UI中布局视图。看起来像这样:

public struct ViewLayoutSection : Codable {
    var title: String = ""
    var sectionLayoutType: String
    var sectionItems: [ViewLayoutSectionItemable] = []
}
Run Code Online (Sandbox Code Playgroud)

ViewLayoutSectionItemable 是一种协议,其中包括要在布局中使用的图像的标题和URL。

但是,sectionItems数组实际上由不同的类型组成。我想做的是将每个小节实例化为自己类的实例。

如何设置的init(from decoder: Decoder)方法,ViewLayoutSection以便让我遍历该JSON数组中的项目并在每种情况下创建适当的类的实例?

json swift codable

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

强制更新子视图控制器的safeAreaInsets

我有一个rootViewController带有子视图控制器(fullScreenViewController)的子视图控制器,该视图不时显示的视图上方(但作为子视图)rootViewController,占据了整个屏幕。

rootViewController.addChildViewController( fullScreenViewController ) rootViewController.view.addSubview( fullScreenViewController.view )

这种“全屏演示”是通过约束更新而不是通过使用来完成的present()(这样做有充分的理由)。

当我第一次初始化fullScreenViewController并将其添加为的子视图控制器时rootViewController,然后更新约束以使其出现在屏幕上,safeAreaInsets都已正确设置。

但是,稍后,当我rootViewController实际执行present()模态VC,并且该VC已被dismiss()编辑时,safeAreaInsets上的fullScreenViewController不再正确,并且fullScreenViewController幻灯片中的内容会在状态栏的顶部向上滑动。

我怎样才能迫使safeAreaInsetsfullScreenViewController得到适当的重新计算,使他们在比赛rootViewController他们安装后做的方式?

根据文档,rootViewController应该在所有childViewControllers 上正确设置safeAreaInsets ,但事实并非如此。

安全区域插图正确

安全区域插图不正确

ios autolayout safearealayoutguide

7
推荐指数
1
解决办法
817
查看次数

iOS 密码自动填充建议新密码而不是现有密码

启动时,我的应用程序中有登录和注册表单。

密码自动填充不断为现有密码字段建议“新的强密码” 。我.password为现有字段和.newPassword新密码字段明确设置了 contentType ,但 iOS 拒绝提供除“新强密码”视图之外的任何内容。

我究竟做错了什么?

这是视图层次结构:

查看层次结构

这是我设置textContentType每个字段的方式:

设置 textContentTypes

这就是你每次在登录时点击密码字段时 iOS 所做的:

iOS 创建新的强密码

passwords autofill ios

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

插入新行时,TableView会滚动到中间

我有一个表视图,显示我通过网络获取的消息.

当有新消息进入时,应将其添加到底部的tableview中.

当有新消息进入时,它会正确地添加到tableview的底部,但是tableview会立即滚动到中间.(所以,如果我现在已经说过100个单元格,那么单元格50现在将位于滚动视图的中间).

奇怪的是,只有在插入前的滚动点位于tableview的下半部分时才会发生这种情况.

所以,如果我正在查看99的单元格10,并且我添加了一行,它会被添加到底部就好了.

但是,如果我正在查看99的单元格75,并且我添加了一行,则滚动位置再次跳到中间(〜单元格50).

这是我向tableview添加新消息的代码:

[self.tableView beginUpdates];
[self.messages addObject:message];

NSArray *indexPaths = @[[NSIndexPath indexPathForRow:(self.messages.count - 1) inSection:0]];

[self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];
Run Code Online (Sandbox Code Playgroud)

为什么tableview会像这样自动滚动?

objective-c uitableview uiscrollview ios

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

如何定义Swift协议以使实现可以是属性_或_方法?

这就是我想要做的事情:

import Foundation
import UIKit

protocol PlayableMediaItem {
    func title() -> String
    func albumArt() -> UIImage
    func audioFileURL() -> URL
}


struct AudioTrack : Codable, PlayableMediaItem {
    var title: String
    var desc:String
    var albumArtDemoName:String
    var audioDemoFilename:String

    func albumArt() -> UIImage {
        let image = UIImage(named: albumArtDemoName)
        return image!
    }

    func audioFileURL() -> URL {
        return Bundle.main.url(forResource: audioDemoFilename, withExtension: "mp3")!
    }
}
Run Code Online (Sandbox Code Playgroud)

但我得到AudioTrack不符合PlayableMediaItem协议的错误,因为该title属性不是方法,它是属性.

我怎样才能设置此让title,albumArt等可以实现为两种属性或方法,只要他们给我回到正确的类型?

我的一些实现可能只是属性,而其他的是计算.

swift swift-protocols

0
推荐指数
1
解决办法
45
查看次数