我目前正在开发一款跟踪时间的应用,但我遇到了问题。
问题是当我在我的测试设备(iphone 5c)上更改时区时,它确实会触发applicationSignificantTimeChange
方法。
但问题是我想知道时区改变的确切时间
(类似于:时区在11h时更改)。有没有办法知道像消息系统或我可以在我的应用程序上检索的东西?
我认为UIApplicationSignificantTimeChangeNotification
可以做到这一点,但我没有设法做到这一点,要么我没有做到这一点,要么就不可能通过此通知。
欢迎任何帮助,谢谢
答案 0 :(得分:0)
不幸的是,当事件实际发生时,您不能依赖于接收消息NSDate
。如果您的应用暂停,它只会在返回前台时收到最后一个通知。您可以在传递邮件时创建applicationSignificantTimeChange:
对象,但是应用程序知道更改的时间,而不是在设备上发生实际更改时。
Apple UIApplicationSignificantTimeChangeNotification
州的文档:
<强>讨论强>
重要时间变化的例子包括到来 午夜,航空公司对时间的更新,以及对航班的更改 夏令时。委托可以实现此方法 调整显示时间或对其敏感的应用程序的任何对象 时间变了。
在调用此方法之前,该应用程序还会发布一个
UIApplicationSignificantTimeChangeNotification
发出通知 有兴趣的对象有机会对变化做出回应。如果您的应用目前暂停,则此消息将排队等候,直到您的应用为止 应用程序返回到前台,此时它将被传递。如果 发生多个时间变化,只传递最新的时间。
object
也无济于事。 UIApplication
属性是userInfo
对象,不提供package zlib.example;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.Arrays;
import java.util.zip.Deflater;
import java.util.zip.DeflaterOutputStream;
import java.util.zip.InflaterInputStream;
/**
* Created by keocra on 08.10.15.
*/
public class Main {
private final static String inputStr = "Hello World!";
public static void main(String[] args) throws Exception {
System.out.println("Will zlib compress following string: " + inputStr);
// will compress "Hello World!"
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DeflaterOutputStream dos = new DeflaterOutputStream(baos);
dos.write(inputStr.getBytes());
dos.flush();
dos.close();
// at this moment baos.toByteArray() holds the compressed data of "Hello World!"
// will decompress compressed "Hello World!"
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
InflaterInputStream iis = new InflaterInputStream(bais);
String result = "";
byte[] buf = new byte[5];
int rlen = -1;
while ((rlen = iis.read(buf)) != -1) {
result += new String(Arrays.copyOf(buf, rlen));
}
// now result will contain "Hello World!"
System.out.println("Decompress result: " + result);
}
}
对象。