小编rih*_*iha的帖子

如何在C中切换int/_Bool

假设我们有一个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)
  1. 第三个似乎有效.为什么?是谁决定!01
  2. 这些都有问题吗?
  3. 还有其他可能吗?例如按位运算符?
  4. 哪个提供最佳性能?
  5. 这些都是相同的_Bool(或bool来自stdbool.h)吗?如果没有,有什么区别?

编辑:很多有价值的信息很多很好的答案,谢谢!不幸的是,我只能接受一个.

c int boolean toggle

15
推荐指数
3
解决办法
3万
查看次数

如何找出iOS版本

是否可以阅读运行MonoTouch应用程序的iOS版本(4.2.1,4.3.3等)?如果是这样,怎么样?

version xamarin.ios ios

11
推荐指数
3
解决办法
5421
查看次数

使用MonoTouch的UINavigationController和UINavigationBarDelegate.ShouldPopItem()

当点击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

11
推荐指数
2
解决办法
8653
查看次数

NIO选择器:如何在选择时正确注册新频道

我有一个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 multithreading nio

10
推荐指数
2
解决办法
5476
查看次数

尽管通道准备就绪,但Java NIO Selector select()返回0

我的Java NIO选择器是使用select()实现的,所以它会阻塞,直到出现以下任何一个:

  1. 已注册的频道已准备就绪
  2. 它是唤醒() "编
  3. 线程被打断了

由此,我对select()返回0 的情况做了一些假设:

  • 它一定是理由2.或3.
  • selectedKeys()应该返回一个空的ResultSet
  • 我不需要调用selectedKeys(),可以继续下一个循环迭代,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)

java nio

9
推荐指数
1
解决办法
6405
查看次数

使用MonoTouch进行JSON反序列化

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?还有其他尝试吗?

谢谢

c# serialization json xamarin.ios

7
推荐指数
1
解决办法
6500
查看次数

如何正确中断JAX-RS AJAX请求

我有一个部署到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)

java ajax rest jboss jax-rs

7
推荐指数
1
解决办法
1755
查看次数

用于关闭JDBC对象的通用帮助器

强烈建议在使用它们时关闭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)

java reflection jdbc

6
推荐指数
1
解决办法
721
查看次数

使用UIToolbar的模态UINavigationController - 工具栏保持为空

我试图在一个模态呈现的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

5
推荐指数
1
解决办法
3072
查看次数

UITableView.ScrollRectToVisible()不会滚动到底部

我有一个包含可变数量的部分和自定义单元格的表视图.在某些情况下,单元格可能会在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()绑定到表的旧内容大小 - 即使在重新加载行之后也是如此.我尝试通过提供新的内容大小和计算出的高度差来解决这个问题.这确实有效,但对我来说真的很烦人.

有一些更干净的方式做事吗?

提前致谢

scroll uitableview xamarin.ios

1
推荐指数
1
解决办法
5151
查看次数