假设我们有一个int与希望之间切换它0,并1在布尔时尚.我想到了以下几种可能性:
int value = 0; // May as well be 1
value = value == 0 ? 1 : 0;
value = (value + 1) % 2;
value = !value; // I was curious if that would do...
Run Code Online (Sandbox Code Playgroud)
!0的1?_Bool(或bool来自stdbool.h)吗?如果没有,有什么区别?编辑:很多有价值的信息很多很好的答案,谢谢!不幸的是,我只能接受一个.
是否可以阅读运行MonoTouch应用程序的iOS版本(4.2.1,4.3.3等)?如果是这样,怎么样?
当点击UINavigationBar的后退按钮(由UINavigationController控制)时,如何弹出UIAlertView?在某些情况下,我想问用户"你确定吗?" 问题类型,以便他可以中止操作并保持当前视图或弹出导航堆栈并转到父视图.
我发现最吸引人的方法是在UINavigationBar的Delegate上覆盖ShouldPopItem().
现在,这里有一个非常相似的问题:iphone navigationController:在退出当前视图之前等待uialertview响应
还有一些类似性质的其他问题,例如: 检查UIViewController是否即将从导航堆栈中弹出? 以及如何判断在UINavigationControllerStack中按下后退按钮的时间
所有这些状态"子类UINavigationController"作为可能的答案.
然后有一个读取像子类UINavigationController一般不是一个好主意: Monotouch:UINavigationController,覆盖initWithRootViewController
在苹果的文档也说的UINavigationController不打算被继承.
其他一些人声称在使用UINavigationController时甚至不能覆盖ShouldPopItem(),因为它不允许将自定义/子类UINavigationBarDelegate分配给UINavigationBar.
我的子类化尝试都没有工作,我的自定义代表没有被接受.
我还在某处读过可能在我的自定义UINavigationController中实现ShouldPopItem(),因为它将自己指定为其UINavigationBar的Delegate.
没什么好吃的,这没用.UINavigationController的子类如何知道属于UINavigationBarDelegate的Methods.它被拒绝:"找不到合适的方法来覆盖".删除已编译的"override"关键字,但完全忽略该方法(如预期的那样).我认为,使用Obj-C可以实现几个协议(类似于C#AFAIK中的接口)来实现这一点.不幸的是,UINavigationBarDelegate不是一个接口而是MonoTouch中的一个类,所以这似乎是不可能的.
我在这里很丢失.当UINavigationBar由UINavigationController控制时,如何在UINavigationBar的Delegate上覆盖ShouldPopItem()?或者有没有其他方法可以弹出UIAlertView并在可能弹出导航堆栈之前等待它的结果?
back-button uinavigationbar uinavigationcontroller xamarin.ios
我有一个Thread私有Selector和公共register(SelectableChannel channel, ...)方法的子类,允许其他线程将通道注册到选择器.
正如这里所回答的那样,register()选择器中的通道阻塞select()/ select(long timeout)所以我们需要wakeup()选择器.
我的线程无限期地选择(除非它被中断)并且它实际上设法在register()调用通道之前进入下一个选择.所以我认为我使用一个带synchronized块的简单锁来确保register()首先发生.
代码:(为了便于阅读,删除了不相关的代码)
public class SelectorThread extends Thread {
...
public void register(SelectableChannel channel, Attachment attachment) throws IOException {
channel.configureBlocking(false);
synchronized (this) { // LOCKING OCCURS HERE
selector.wakeup();
channel.register(selector,
SelectionKey.OP_READ,
attachment);
}
}
@Override
public void run() {
int ready;
Set<SelectionKey> readyKeys;
while (!isInterrupted()) {
synchronized (this) {} // LOCKING OCCURS HERE
try { …Run Code Online (Sandbox Code Playgroud) 我的Java NIO选择器是使用select()实现的,所以它会阻塞,直到出现以下任何一个:
由此,我对select()返回0 的情况做了一些假设:
ResultSetselectedKeys(),可以继续下一个循环迭代,select()再次调用但是,我遇到了select()返回0的情况,尽管有一个就绪通道.按预期selectedKeys()返回a Set为1 SelectionKey.
即使是几次调用select()也始终会返回0,直到处理完通道并SelectionKey删除它.这种情况基本上以无限循环结束,因为select()不阻止但总是立即返回0.
简化代码:
Selector selector = Selector.open();
SocketChannel channel;
for (...) { // for each node
// Create and connect channels...
...
channel.configureBlocking(false);
channel.register(selector, SelectionKey.OP_READ, someRelatedObject);
}
int ready;
Set<SelectionKey> readyKeys;
while (true) {
ready = selector.select();
readyKeys = selector.selectedKeys();
System.out.println("Ready channels: " + …Run Code Online (Sandbox Code Playgroud) Web上有各种各样的资源,解释了如何将一些C#对象序列化为JSON字符串.我无法让任何人使用MonoTouch 3.2.4.
我遇到的替代品:
System.Json命名空间
我已经成功使用System.Json命名空间来反序列化数据.因此,为了简单起见,我宁愿坚持这一点,如果可能的话.不幸的是,我不知道如何用它序列化(或者甚至可能).
System.Runtime.Serialization.Json.DataContractJsonSerializer
MonoTouch中没有System.Runtime.Serialization.Json命名空间.我在某处读到它是.NET 3.5的一部分,而且MonoTouch处于.NET 2.0级别.这可能解释了它.
System.Web.Script.Serialization.JavaScriptSerializer
在MonoTouch中也缺少这个(事实上,似乎只有System.Web.Services可用).
James Newton-King的Json.NET
我通过包含.NET 2.0程序集dll和使用Newtonsoft.Json.JsonConvert.SerializeObject()设法使这个工作在模拟器上工作.但是,这不会为设备编译,错误" mtouch失败,没有输出 ".一旦我删除了程序集引用,它就会很好地编译.
有没有办法让其中一个使用MonoTouch?还有其他尝试吗?
谢谢
我有一个部署到JBoss 7.1.1.Final的Java EE应用程序.该应用程序利用JAX-RS为客户端提供REST服务.其中一个服务保持客户端连接,直到通过a接收响应对象BlockingQueue.到目前为止,这似乎工作正常.但是,即使删除了应用程序部署/关闭了应用程序,连接也会保持打开状态.它甚至可以阻止JBoss关闭.
所以我试图通过@PreDestroy回调中断等待线程来执行干净关闭.该服务看起来像这样:
@Path("/mypath")
@SessionScoped
public class MyResource implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private EntityManager em;
private Thread thread = null;
@GET
@Path("/{id:[0-9][0-9]*}")
@Produces({
MediaType.TEXT_PLAIN,
MediaType.TEXT_XML
})
public Response getObjects(@PathParam("id") long id) {
MyGroup group = this.em.find(MyGroup.class, id);
if (group == null) {
return Response.status(Status.NOT_FOUND)
.entity("Group not found\n")
.build();
}
if (group.isEmpty()) {
return Response.status(Status.PRECONDITION_FAILED)
.entity("Group is empty\n")
.build();
}
BlockingQueue<?> queue = ... // Get queue for group …Run Code Online (Sandbox Code Playgroud) 强烈建议在使用它们时关闭JDBC对象(连接,语句,结果集).但是,这会产生大量代码:
Connection conn = null;
Statement stm = null;
ResultSet res = null;
try {
// Obtain connection / statement, get results, whatever...
} catch (SQLException e) {
// ...
} finally {
if (res != null) { try { res.close(); } catch (SQLException ignore) {}}
if (stm != null) { try { stm.close(); } catch (SQLException ignore) {}}
if (conn != null) { try { conn.close(); } catch (SQLException ignore) {}}
}
Run Code Online (Sandbox Code Playgroud)
现在我想通过实现一个辅助函数减少关闭对象的(重复)代码量.它将对象作为参数,并尝试close()使用反射来调用每个对象的方法(如果对象确实具有这样的方法).
public void close(Object... objects) …Run Code Online (Sandbox Code Playgroud) 我试图在一个模态呈现的UINavigationController的底部放一个简单的UIToolbar.在此示例中,它应包含两个按钮"取消"和"某事".
...
UINavigationController modalNavigationController = new UINavigationController(someViewController);
modalNavigationController.NavigationBar.BarStyle = UIBarStyle.Black;
modalNavigationController.Toolbar.BarStyle = UIBarStyle.Black;
modalNavigationController.ToolbarHidden = false;
UIBarButtonItem cancelButton = new UIBarButtonItem("cancel", UIBarButtonItemStyle.Plain, delegate {
modalNavigationController.DismissModalViewControllerAnimated(true);
});
UIBarButtonItem flexSpace = new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace, null);
UIBarButtonItem someButton = new UIBarButtonItem("something", UIBarButtonItemStyle.Plain, delegate {
Console.WriteLine("here we are!");
});
modalNavigationController.ToolbarItems = new UIBarButtonItem[] { cancelButton, flexSpace, someButton };
parentController.PresentModalViewController(modalNavigationController, true);
...
Run Code Online (Sandbox Code Playgroud)
工具栏显示并具有黑色样式(已分配),但它不包含任何项目.我已经尝试在将hidden设置为false之前分配项目,没有效果.我也试过使用Toolbar.Items和Toolbar.Hidden以及SetToolbarItems()和SetToolbarHidden()代替,没有运气.
关于这里可能出错的任何提示?谢谢
编辑:
网上的大多数样本创建自己的UIToolbar并将其添加为子视图.UINavigationController不需要这样,对吧?AFAICT,它有一个内置的.
uitoolbar uinavigationcontroller xamarin.ios modalviewcontroller
我有一个包含可变数量的部分和自定义单元格的表视图.在某些情况下,单元格可能会在RowSelected()内调整大小.每当发生这种情况时,我还要确保在调整大小(放大)后单元格完全可见.
我在另一个表中工作,只是修改基础数据,以便表视图源将提供更大的单元格.然后我重新加载单元格并将其滚动显示如下:
// Modify data
//...
// Reload cell
tableView.ReloadRows(new NSIndexPath[] { indexPath }, UITableViewRowAnimation.None);
tableView.ScrollRectToVisible(tableView.CellAt(indexPath).Frame, true);
Run Code Online (Sandbox Code Playgroud)
问题出现在表视图中,其中调整大小不仅可以由RowSelected()触发,还可以由单元格内的UI元素上的事件触发.
然后事件调用一个方法来重新加载单元格:
void updateCell() {
if (cell.Superview != null) {
UITableView tableView = (UITableView)cell.Superview;
tableView.ReloadRows(new NSIndexPath[] { indexPath }, UITableViewRowAnimation.None);
// Get the new (possibly enlarged) frame
RectangleF frame = tableView.CellAt(indexPath).Frame;
Console.WriteLine("This really is the new large frame, height: {0}", frame.Height);
// Try to scroll it visible
tableView.ScrollRectToVisible(frame, true);
}
}
Run Code Online (Sandbox Code Playgroud)
这适用于所有细胞,但最底部.它只会使该单元格的旧框架可见.我仔细检查它确实为ScrollRectToVisible()提供了新的单元格框架.
因此,似乎ScrollRectToVisible()绑定到表的旧内容大小 - 即使在重新加载行之后也是如此.我尝试通过提供新的内容大小和计算出的高度差来解决这个问题.这确实有效,但对我来说真的很烦人.
有一些更干净的方式做事吗?
提前致谢