我正在尝试加载一个公交网站,这样我就可以为一个停止时间刮掉停止时间.加载url后,稍后会通过javascript动态加载停止时间.我的目标是通过一类"停止时间"来检测元素的存在.如果html中存在这些元素,我可以解析html.但在我解析html之前,我必须等待这些元素出现"停止时间".我读了很多其他的SO问题,但我不能把它拼凑起来.我正在实现didReceive消息函数,但我不确定如何加载javascript我需要检测元素的存在(具有"停止时间"类的元素).我成功注入了一些javascript以防止显示位置权限弹出窗口.
override func viewDidLoad() {
super.viewDidLoad()
let contentController = WKUserContentController()
let scriptSource = "navigator.geolocation.getCurrentPosition = function(success, error, options) {}; navigator.geolocation.watchPosition = function(success, error, options) {}; navigator.geolocation.clearWatch = function(id) {};"
let script = WKUserScript(source: scriptSource, injectionTime: .atDocumentStart, forMainFrameOnly: true)
contentController.addUserScript(script)
let config = WKWebViewConfiguration()
config.userContentController = contentController
webView = WKWebView(frame: .zero, configuration: config)
self.view = self.webView!
loadStopTimes("https://www.website.com/stop/1000")
}
func loadStopTimes(_ busUrl: String) {
let urlString = busUrl
let url = URL(string: urlString)!
let urlRequest = URLRequest(url: url)
webView?.load(urlRequest)
}
func userContentController(_ …Run Code Online (Sandbox Code Playgroud) 我正在制作游戏,我希望心脏看起来像是在跳动.我的方法是有一个心脏的两个图像.一个比另一个大.我有一个作为UIButton(因为开始游戏我想点击心脏这样做),而另一个更大的心脏版本是UIImageView.到目前为止,我已经拥有它,所以心脏每秒都会改变大小,但我希望它更加真实.例如,每一秒,它将变为大心脏和后面(但不是立即,所以它清晰可见).我怎样才能做到这一点?这是我的代码:
PlayViewController.h
#import <UIKit/UIKit.h>
@interface PlayViewController : UIViewController
{
IBOutlet UIButton *heartButton;
IBOutlet UIImageView *heartBig;
NSTimer *heartBeat;
}
@end
Run Code Online (Sandbox Code Playgroud)
PlayViewController.m
#import "PlayViewController.h"
@interface PlayViewController ()
@end
@implementation PlayViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
heartBig.hidden = YES;
heartBeat = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(beatHeart) userInfo:nil repeats:YES];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated. …Run Code Online (Sandbox Code Playgroud) 三个小时前,我收到一封关于我的免费应用程序的电子邮件,说它已"准备出售"了.当我进入iTunes Connect时,会出现"在App Store中查看"的链接.当我点击此链接时,它显示正常(它显示在iTunes中),但是当我在iTunes或应用程序商店中手动搜索时,没有任何内容(找不到任何内容).是否有一定的等待时间出现或我做错了什么?谢谢.
我在调试此错误时遇到问题。我在我的 iOS 应用程序上使用 Crashlytics,并且在我的一些应用程序中看到了这个错误。这是堆栈跟踪的一部分:
这是我在 BusStopTimesViewController.swift 中的代码(我评论了第 140 行,因为根据跟踪,这似乎是问题发生的地方):
func loadBusData(_ busUrl: String) {
let urlString = busUrl
let url = URL(string: urlString)!
...
if passingTimePredicted != "" {
let nextBusDate = dateFormatter.date(from: passingTimePredicted)
// THE FOLLOWING LINE IS LINE 140
var minutesUntilBus = (nextBusDate!.timeIntervalSince1970 - Date().timeIntervalSince1970) / 60
let calendar = Calendar.current
let hour = calendar.component(.hour, from: nextBusDate!)
let minutes = calendar.component(.minute, from: nextBusDate!)
...
}
}
Run Code Online (Sandbox Code Playgroud)
我最初的想法是因为 nextBusDate 是 nil 并且我正在尝试使用它,但我不认为那是因为错误没有说明 nextBusDate 为零(尽管我可能应该在使用之前检查它是否为零它)。我对这个错误(关闭#1)是什么感到困惑?任何想法将不胜感激。
我想知道是否可以阻止WKWebView显示位置权限提示?(“website.com”想要使用您当前的位置)我相信它的显示是因为该网站包含谷歌地图。我对在其位置预加载位置不感兴趣,就像其他问题中所示。我只是不想在 WKWebView 中使用位置。有没有办法阻止出现位置权限提示?我尝试过注入以下 JavaScript,但它不起作用。
let contentController = WKUserContentController()
let scriptSource = "navigator.geolocation.getCurrentPosition = function(success, error, options) { // }; navigator.geolocation.watchPosition = function(success, error, options) { // }; navigator.geolocation.clearWatch = function(id) { // };"
let script = WKUserScript(source: scriptSource, injectionTime: .atDocumentEnd, forMainFrameOnly: true)
contentController.addUserScript(script)
let config = WKWebViewConfiguration()
config.userContentController = contentController
webView = WKWebView(frame: .zero, configuration: config)
self.view = webView
Run Code Online (Sandbox Code Playgroud) 我的目标很简单。在我的应用程序中,用户按下某个站点,它将打开一个屏幕,显示经过该站点的每条路线(公交车),并显示该站点每条路线的接下来 2 个站点时间。当用户按下停止 ID 为 1571 的停止时我想要显示的示例:
前往 569 站的巴士
路线 2
23 分钟(上午 7:23)
43 分钟(上午 7:43)
37 号公路
15 分钟(上午 7:15)
45 分钟(上午 7:45)
返回的示例数据(我想要的):
st.departure_time、rte.route_long_name、tr.trip_headsign
07:23:00、路线 2、市中心
07:43:00、路线 2、市中心
07:15:00、路线 37、市中心
07:45:00,37 号公路,市中心
应该注意的是,停止代码是 569,停止 ID 是 1571。根据GTFS文档,用户通常会搜索停止代码 (569),但在内部搜索的是停止 ID (1571)。这些来自 GTFS 包中的 Stops.txt 文件。
该示例显示 2 条路线(2 和 37),但可能有更多路线,可能只有 1 条路线,或者在不久的将来根本没有路线经过此站点(我想忽略超过的时间) 24小时路程)。
免责声明:我不太擅长 SQL。我能够创建一个似乎检索相关数据的查询,但是,它返回的数据远多于每条路线接下来的 2 个停靠时间。我正在我的应用程序中解析它以获得所需的结果,但我觉得改进我的查询会容易得多。
SELECT stop_times.departure_time, routes.route_long_name, trips.trip_headsign, calendar.monday, calendar.tuesday, calendar.wednesday, calendar.thursday, calendar.friday, calendar.saturday, calendar.sunday
FROM stop_times, trips, routes, calendar
WHERE stop_times.stop_id …Run Code Online (Sandbox Code Playgroud) ios ×4
swift ×3
javascript ×2
wkwebview ×2
animation ×1
gtfs ×1
ios7 ×1
mysql ×1
objective-c ×1
sql ×1