我习惯于编写Java Swing UI,如果你有一些属性发生变化,并且你希望你的UI更新,你将实现观察者/可观察模式.在Java中,您通常通过让您的类维护一个监听器列表来通知不同的事件.
我在Mac上玩过Objective-C,它有KVC和绑定,看起来非常好用,并且需要的代码更少.虽然iPhone SDK似乎没有这个功能,所以我的问题是:如果我有一个包含更改数据的类,那么我最好的方法是向该类注册一个UI组件,以便通知它需要显示的数据变化?
我有一个UIScrollView显示垂直数据,但水平组件不比iPhone的屏幕宽.问题是用户仍然能够水平拖动,并且基本上暴露UI的空白部分.我试过设置:
scrollView.alwaysBounceHorizontal = NO;
scrollView.directionalLockEnabled = YES;
Run Code Online (Sandbox Code Playgroud)
这有点帮助,但仍然不能阻止用户水平拖动.当然有一种方法可以轻松解决这个问题吗?
我意识到你可以通过这样的方式打开谷歌地图应用程序准备好方向:
NSString* urlString = @"http://maps.google.com/maps?saddr=London+UK&daddr=Birmingham+UK";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: urlString]];
Run Code Online (Sandbox Code Playgroud)
但是我可以添加一个参数来自动切换到总线方向吗?Apple的开发者文档似乎没有提及任何相关内容:
我有一个支持横向和纵向观看的视图,当你从一个切换到另一个时,控件都会移动.我正在通过在用户旋转手机时设置每个控件的.center来实现此目的.问题是这很乏味,并且需要大量代码,并且似乎首先破坏了使用Interface Builder的目的.
我的问题是:在Interface Builder中是否有一种方法可以支持多个外观(一个用于纵向一个用于纵向)?如果没有其他人如何与IB这样做?你设置了2个视图吗?
编辑:只是为了澄清我的风景和肖像视图看起来不同,我不想直接变换,我实际上在横向模式下显示不同的数据
我有一组状态,我希望在应用程序的生命周期中缓存,最好是在第一次调用它之后.我正在使用EclipseLink作为我的持久性提供程序.在我的EJB3实体中,我有以下代码:
@Cache
@NamedQueries({
@NamedQuery(
name = "State.findAll",
query = "SELECT s FROM State s",
hints = {
@QueryHint(name=QueryHints.CACHE_USAGE, value=CacheUsage.CheckCacheThenDatabase),
@QueryHint(name=QueryHints.READ_ONLY, value=HintValues.TRUE)
}
)
})
Run Code Online (Sandbox Code Playgroud)
这似乎没有做任何事情,如果我监视进入MySQL的SQL查询,它每次我的会话Bean使用这个NamedQuery时仍然会做一个选择.
配置此查询的正确方法是什么,以便只从数据库中读取一次,最好是在所有会话中读取?
编辑:我正在调用这样的查询:
Query query = em.createNamedQuery("State.findAll");
List<State> states = query.getResultList();
Run Code Online (Sandbox Code Playgroud) 我正在尝试在托管模式下运行时在后端java代码中调用Web服务.一切都很好,GWT RPC调用工作,我可以在服务器上看到它,然后一旦它尝试调用外部Web服务(使用jax-ws),jetty就会出现内部服务器错误(500).
我已经将日志一直转到ALL,但我仍然没有看到任何堆栈跟踪或导致此错误.我只得到一行关于请求标头和响应的500错误.
有没有人知道内部码头是否在某处保存了日志文件,或者我如何调试错误?
我在OS X 10.6.1上运行GWT 1.7
编辑:我知道我可以使用-noserver选项,但我真的很想知道这个东西在哪里生活!
我正在尝试实现支持索引的Core Data支持的UITableView(例如:出现在侧面的字符,以及与它们一起出现的节标题).在没有Core Data的情况下,我没有遇到任何问题:
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView;
Run Code Online (Sandbox Code Playgroud)
在没有使用索引的情况下实现由Core Data支持的UITableView也没有问题.
我想弄清楚的是如何优雅地将两者结合起来?显然,一旦索引和重新分区内容,就不能再使用标准的NSFetchedResultsController来检索给定索引路径的内容.所以我将索引字母存储在NSArray中,将我的索引内容存储在NSDictionary中.这一切都适用于显示,但在添加和删除行时我有一些真正的麻烦,特别是如何正确实现这些方法:
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller;
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath;
- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type;
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller;
Run Code Online (Sandbox Code Playgroud)
因为它返回的索引路径与核心数据中的索引路径没有相关性.当用户添加一行时,我通过简单地重建我的索引NSArray和NSDictionary来添加工作,但是当他们删除一个时,执行相同操作会导致整个应用程序崩溃.
是否有一个简单的模式/示例我在这里缺少使所有这些工作正常?
编辑:只是为了澄清我知道NSFetchedResultsController是开箱即用的,但我想要的是复制像Contacts应用程序这样的功能,其中索引是该人名的第一个字母.
iphone core-data uitableview nsfetchedresultscontroller cocoa-design-patterns
我正试图找到一种方法来检测蓝牙耳机连接并断开Android 2.1的事件.我在API Level 11中看到有一些明确的,但我如何在API级别7中执行此操作?我只是想知道用户何时连接或断开能够播放音频的耳机或汽车音响,以便我可以暂停正在播放的声音.
有没有办法检测iPhone在应用程序运行时是否从睡眠中醒来?例如:您的应用程序正在运行,用户锁定屏幕(或屏幕自动锁定),一段时间后用户解锁屏幕并向上弹出您的应用程序.有没有办法在那时获得一个事件或以某种方式检测它?
我试过搜索谷歌和这个论坛,但我似乎无法找到任何相关信息.
我在我的iPhone项目中获得了一行EXC_BAD_ACCESS(SIGBUS):
if (timeoutTimer) [timeoutTimer invalidate];
Run Code Online (Sandbox Code Playgroud)
令我难过的是我不明白该行怎么会崩溃,因为if语句意味着要检查nil.我是否误解了Objective-C的工作方式,或者在崩溃语句中的行号有时会出现错误的行?
iphone ×7
cocoa-touch ×3
objective-c ×2
android ×1
bluetooth ×1
cocoa ×1
core-data ×1
eclipselink ×1
ejb-3.0 ×1
google-maps ×1
gwt ×1
java ×1
java-ee ×1
jpa ×1
playback ×1
uitableview ×1