我这样做的原因是,作为日期对象存储在任何数据库中的日期往往以特定格式编写,这可能与您需要在前端向用户呈现的内容大不相同.我还认为,如果您的应用程序从不同类型的数据存储中提取信息,这将特别有用.一个很好的例子是MongoDB和SQL日期对象之间的区别.
但是,我不知道这是否是推荐的做法.我应该将日期保存为长(以毫秒为单位)或作为日期对象吗?
我正在尝试使用可视格式语言将顶部和底部填充设置为Autolayout中的视图.如果我将可视格式字符串中的填充写为整数,代码将编译并运行,但是当我尝试用常量替换它时它会失败.这是我得到的错误:
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'无法解析约束格式:无法设置等于视图宽度或高度的空间.也许您想使用视图作为间隔?[view1] [spacer(== view1)] [view2] V:| -kTopAndBottomPadding- [messageTextView] -kTopAndBottomPadding- |
这是我的代码.
CGFloat const SPMTVC_kTopAndBottomPadding = 5.0;
// ...
// Create my own NSDictionary of variable bindings.
NSDictionary *variableBindings = @{@"messageTextView" : _messageTextView,
@"contentView" : self.contentView,
@"kTopAndBottomPadding" : [NSNumber numberWithFloat:SPMTVC_kTopAndBottomPadding]};
// Constraints in the horizontal axis.
// Basically just pins the view to the left and right of superview.
NSMutableArray *constraints = [[NSLayoutConstraint
constraintsWithVisualFormat:@"H:|-0-[messageTextView(==contentView)]-0-|"
options:NSLayoutFormatAlignAllLeading
metrics:nil
views:variableBindings] mutableCopy];
// Constraints in vertical axis, give 5-point padding from superview's top & bottom. …Run Code Online (Sandbox Code Playgroud) 我想格式化我的日期如下:
Mon, Apr 14 '09
Run Code Online (Sandbox Code Playgroud)
在dateFormat我设置为我的NSDateFormatter就是EEE, MMM dd 'yy,但它显示:
Mon, Apr 14 'yy
Run Code Online (Sandbox Code Playgroud)
如果我在一年之前拿出单引号,我会得到当年的最后两位数字,但由于单引号已经消失,所以这一年并不明显.救命?
我也试图把''','\''和'\'''之前"YY",但它不工作,虽然最后两个产生'yy和''09
我创建了一个BroadcastReceiver侦听CONNECTIVITY_CHANGE事件的人.现在,我只是打印出Intent调用BroadcastReceiver它及其附加内容的动作.我在马尼拉的办公室里使用的是测试电话,SIM卡来自丹麦.当onReceive()被调用时,这是获取logcat中打印出来:
action: android.net.conn.CONNECTIVITY_CHANGE
key: extraInfo, value: data.tre.dk
key: htcCurrentActiveNetwork, value: null
key: networkInfo, value: null
key: reason, value: roamingOn
key: noConnectivity, value: null
key: inetCondition, value: null
Run Code Online (Sandbox Code Playgroud)
我需要知道reason漫游消失时的价值是什么 - 可能是roamingOff通过猜测,但我无法确定,除非我去丹麦.这是因为我需要在漫游服务关闭时执行任务,并且我从LogCat注意到CONNECTIVITY_CHANGE事件是由于切换漫游模式以外的原因而触发的.或者是否有更好的方法来检测何时关闭漫游?
广播接收机代码:
public void onReceive(Context context, Intent intent) {
Log.d(This.LOGTAG, "action: " + intent.getAction());
Bundle extras = intent.getExtras();
for (String key : extras.keySet()) {
Log.d(This.LOGTAG, "key: " + key + ", value: " + extras.getString(key)); …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用AFNetworking和NSProgress跟踪我的HTTP请求的进度.基本上,我的请求是一个包含文本参数和图像数据的多部分表单数据,所有这些都在一个块中.
这是我上传任务的代码,对我来说似乎很简单和正常:
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"<THE_API_URL>" parameters:nil constructingBodyWithBlock:constructionBlock];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
NSProgress *progress = [[NSProgress alloc] initWithParent:nil userInfo:nil];
[progress addObserver:self forKeyPath:@"fractionCompleted" options:NSKeyValueObservingOptionNew context:NULL];
NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:&progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
if (error) {
// UI reacts to error
} else {
// Do stuff here
}
}];
[uploadTask resume];
Run Code Online (Sandbox Code Playgroud)
现在,我不明白的是,即使上传任务完成并成功,也不会调用回调观察者方法.有人可以帮我理解为什么吗?这是我的代码.
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
[super observeValueForKeyPath:keyPath ofObject:object change:change …Run Code Online (Sandbox Code Playgroud) HtmlUnit是一个很棒的Java库,允许您以编程方式填写和提交Web表单.我目前正在维护一个用ASP编写的旧系统,而不是按照我的要求每月手动填写这一个Web表单,我试图找到一种方法来自动完成整个任务,因为我保持忘了它.它是一种用于检索一个月内收集的数据的表单.这是我到目前为止编码的内容:
WebClient client = new WebClient();
HtmlPage page = client.getPage("http://urlOfTheWebsite.com/search.aspx");
HtmlForm form = page.getFormByName("aspnetForm");
HtmlSelect frMonth = form.getSelectByName("ctl00$cphContent$ddlStartMonth");
HtmlSelect frDay = form.getSelectByName("ctl00$cphContent$ddlStartDay");
HtmlSelect frYear = form.getSelectByName("ctl00$cphContent$ddlStartYear");
HtmlSelect toMonth = form.getSelectByName("ctl00$cphContent$ddlEndMonth");
HtmlSelect toDay = form.getSelectByName("ctl00$cphContent$ddlEndDay");
HtmlSelect toYear = form.getSelectByName("ctl00$cphContent$ddlEndYear");
HtmlCheckBoxInput games = form.getInputByName("ctl00$cphContent$chkListLottoGame$0");
HtmlSubmitInput submit = form.getInputByName("ctl00$cphContent$btnSearch");
frMonth.setSelectedAttribute("1", true);
frDay.setSelectedAttribute("1", true);
frYear.setSelectedAttribute("2012", true);
toMonth.setSelectedAttribute("1", true);
toDay.setSelectedAttribute("31", true);
toYear.setSelectedAttribute("2012", true);
games.setChecked(true);
submit.click();
Run Code Online (Sandbox Code Playgroud)
之后click(),我应该等待同一个网页完成重新加载,因为某处有一个表格显示我的搜索结果.然后,当页面加载完成后,我需要将其作为HTML文件下载(非常类似于您最喜爱的浏览器中的"保存页面..."),因为我将清除数据以计算总数,而且我已经使用Jsoup库完成了.
我的问题是:1.如何以编程方式等待网页在HtmlUnit中完成加载?2.如何以编程方式将生成的网页下载为HTML文件?
我已经查看了HtmlUnit文档,但找不到能满足我需求的类.
我希望我的程序在最后一行文本的末尾找到文件结尾 (EOF) 时执行某些操作,并且当 EOF 位于最后一行文本之后的空行时执行其他操作。不幸的是,BufferedReader 似乎认为这两种情况是平等的。
例如,这是我读取文件末尾行的代码:
FileReader fr = new FileReader("file.txt");
BufferedReader br = new BufferedReader(fr);
String line;
while((line = br.readLine()) != null) {
if (line.equals("")) {
System.out.println("Found an empty line at end of file.");
}
}
Run Code Online (Sandbox Code Playgroud)
如果 file.txt 包含此内容,则不会打印:
line of text 1
another line 2//cursor
Run Code Online (Sandbox Code Playgroud)
这也不会打印:
line of text 1
another line 2
//cursor
Run Code Online (Sandbox Code Playgroud)
但是,这将:
line of text 1
another line 2
//cursor
Run Code Online (Sandbox Code Playgroud)
我可以使用什么阅读器来区分前两种情况?
我正在使用一个NSPersistentContainer来管理我的应用程序的核心数据堆栈.如您所知,它具有一个viewContext属性,该属性与应用程序主UI线程中的主队列相关联.我用它来读取数据库中的数据.为了编写新数据(在后台完成NSOperation),我使用背景上下文newBackgroundContext(),然后save()使用背景上下文直到持久性存储.
现在,文档viewContext说明了这一点:
此上下文配置为分代,并自动使用来自其他上下文的保存通知.
没有在它是如何消耗节省通知苹果文档的任何详细信息,但我想,NSPersistentContainer在内部做mergeChangesFromContextDidSaveNotification:的viewContext.我希望在viewContext完成合并时得到通知,以便我可以在视图控制器中触发一个函数来重新获取更新的数据并显示它.
但是,我不知道该怎么做.没有NSManagedObjectContext委托这样的东西.我也认为听NSManagedObjectContextDidSaveNotification不是要走的路,因为它在上下文保存时被触发,而不是在viewContext 完成从保存中合并更改时.
我不明白为什么编译器要求在这个系统风格的UIBarButtonItem初始化程序中使用style参数的参数 - 它首先没有该参数.救命?这是Swift的错误吗?
class ExpensesViewController: UIViewController {
lazy var newExpenseBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: Selector("newExpenseBarButtonItemTapped:"))
func newExpenseBarButtonItemTapped() {
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个名为Field的自定义对象.我基本上用它来定义表单中的单个字段.
class Field {
var name: String
var value: Any?
// initializers here...
}
Run Code Online (Sandbox Code Playgroud)
当用户提交表单时,我验证每个Field对象以确保它们包含有效值.有些字段不是必需的,所以我有时会故意设置nil为这样的value属性:
field.value = nil
Run Code Online (Sandbox Code Playgroud)
当我使用if-let来确定字段是否为零时,这似乎会造成问题.
if let value = field.value {
// The field has a value, ignore it...
} else {
// Add field.name to the missing fields array. Later, show the
// missing fields in a dialog.
}
Run Code Online (Sandbox Code Playgroud)
我在上面的if-else中设置了断点,当field.value故意设置为nil时,它会通过if-let块,而不是else.但是,对于field.value我未初始化和未分配的字段,程序将转到else块.
我想打印出来field.value,并value在IF-让块内:
if let value = field.value {
NSLog("field.value: …Run Code Online (Sandbox Code Playgroud)