我不想花时间学习Obj-C.我花了7年多的时间做网络应用程序编程.难道不应该有办法使用WebView,只需在javascript中编写整个应用程序,从项目资源中提取文件?
我有一个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.
我在NSSet中有数据,我需要将它放入NSArray中.
我是否需要自己排序(再次,这来自Core Data)或者我可以按排序顺序将其排除吗?
我正在尝试NSData var从一个字节数组创建一个.
在Obj-C中我可能会这样做:
NSData *endMarker = [[NSData alloc] initWithBytes:{ 0xFF, 0xD9 }, length: 2]
我无法弄清楚Swift中的工作等价物.
我现在使用了几个应用程序直接从应用程序启动itunes商店.我甚至在2.1 iPod 2G上使用了一些.
我知道2.1中有一个错误阻止appstore链接在safari中工作,但不知何故人们直接启动appstore,甚至没有通过safari启动.
你怎么做到这一点?它是一个未记录的openURL功能吗?
我正在制作一些粒子,而不是在他们一生的最后消失,我希望它们淡出.
我有一个CAEmitterCell生命周期为35.0 的定义.我不希望粒子在粒子寿命的整个持续时间内淡出.我只想让它在最后淡出.也许最后2或3秒.
我正在构建一个名为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位于主机应用程序的模板文件中
我无法弄清楚为什么这个路由助手在这种情况下不可用.我究竟做错了什么?
我正在尝试从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数组中的项目并在每种情况下创建适当的类的实例?
我有一个rootViewController带有子视图控制器(fullScreenViewController)的子视图控制器,该视图不时显示在的视图上方(但作为子视图)rootViewController,占据了整个屏幕。
即
rootViewController.addChildViewController( fullScreenViewController )
rootViewController.view.addSubview( fullScreenViewController.view )
这种“全屏演示”是通过约束更新而不是通过使用来完成的present()(这样做有充分的理由)。
当我第一次初始化fullScreenViewController并将其添加为的子视图控制器时rootViewController,然后更新约束以使其出现在屏幕上,safeAreaInsets都已正确设置。
但是,稍后,当我rootViewController实际执行present()模态VC,并且该VC已被dismiss()编辑时,safeAreaInsets上的fullScreenViewController不再正确,并且fullScreenViewController幻灯片中的内容会在状态栏的顶部向上滑动。
我怎样才能迫使safeAreaInsets上fullScreenViewController得到适当的重新计算,使他们在比赛rootViewController他们安装后做的方式?
根据文档,rootViewController应该在所有childViewControllers 上正确设置safeAreaInsets ,但事实并非如此。
启动时,我的应用程序中有登录和注册表单。
密码自动填充不断为现有密码字段建议“新的强密码” 。我.password为现有字段和.newPassword新密码字段明确设置了 contentType ,但 iOS 拒绝提供除“新强密码”视图之外的任何内容。
我究竟做错了什么?
这是视图层次结构:
这是我设置textContentType每个字段的方式:
这就是你每次在登录时点击密码字段时 iOS 所做的:
我有一个表视图,显示我通过网络获取的消息.
当有新消息进入时,应将其添加到底部的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会像这样自动滚动?
这就是我想要做的事情:
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等可以实现为两种属性或方法,只要他们给我回到正确的类型?
我的一些实现可能只是属性,而其他的是计算.
ios ×7
swift ×4
iphone ×2
objective-c ×2
app-store ×1
autofill ×1
autolayout ×1
codable ×1
devise ×1
javascript ×1
json ×1
nsarray ×1
nsnull ×1
nsset ×1
passwords ×1
sorting ×1
uiscrollview ×1
uitableview ×1