我有一个iPhone应用程序,基本上是从API获取信息(在XML中,但最终可能是JSON).结果对象通常显示在视图控制器(主要是表)中.
这是现在的架构.
我有NSOperation类从远程服务器获取不同的对象.这些NSOperation类中的每一个都将采用自定义委托方法,该方法将在解析结果对象时触发它们,然后在没有更多结果可用时最终获取方法.因此,代表的协议将是这样的:
(void) ObjectTypeResult:(ObjectType *)result;
(void) ObjectTypeNoMoreResults;
Run Code Online (Sandbox Code Playgroud)
我认为解决方案运行良好,但我最终得到了一堆委托协议,然后我的视图控制器必须实现所有这些委托方法.我不认为它那么糟糕,但我总是在寻找更好的设计.
所以,我正在考虑使用NSNotifications来删除委托的使用.我可以将对象包含在通知的userInfo部分中,只发布收到的对象,然后在没有更多可用时发布最终事件.然后我可以在每个视图控制器中有一个方法来接收所有数据,即使在一个控制器中使用多个对象也是如此.†
那么,有人可以与我分享每种方法的优点/缺点.我是否应该考虑重构我的代码以使用事件而不是代理?在某些情况下,一个比另一个好吗?在我的场景中,我真的不想在多个地方接收通知,所以也许基于协议的代表是可行的方法.
谢谢!
我有模块应用程序.当我运行它时,该应用程序的主窗口具有相当复杂的菜单.如何从菜单中删除一些项目?
我正在研究一个使用ArrayList存储的程序Strings.程序通过菜单提示用户,并允许用户选择要执行的操作.这样的操作是将字符串添加到列表,打印条目等.我想要做的是创建一个名为的方法removeDuplicates().此方法将搜索ArrayList并删除任何重复的值.我想在列表中留下一个重复值的实例.我还希望此方法返回已删除的重复项的总数.
我一直在尝试使用嵌套循环来实现这一点,但是我遇到了麻烦,因为当条目被删除时,变量的索引ArrayList会被改变,并且事情不能正常工作.我从概念上知道我需要做什么但是我在代码中实现这个想法时遇到了麻烦.
这是一些伪代码:
从第一次入门开始; 检查列表中的每个后续条目,看它是否与第一个条目匹配; 删除列表中与第一个条目匹配的每个后续条目;
在检查完所有条目后,转到第二个条目; 检查列表中的每个条目,看它是否与第二个条目匹配; 删除列表中与第二个条目匹配的每个条目;
重复列表中的条目
这是我到目前为止的代码:
public int removeDuplicates()
{
int duplicates = 0;
for ( int i = 0; i < strings.size(); i++ )
{
for ( int j = 0; j < strings.size(); j++ )
{
if ( i == j )
{
// i & j refer to same entry so do nothing
}
else if ( strings.get( j ).equals( strings.get( i …Run Code Online (Sandbox Code Playgroud) 我在我正在处理的代码库中遇到以下代码:
public final class ConfigurationService {
private static final ConfigurationService INSTANCE = new ConfigurationService();
private List providers;
private ConfigurationService() {
providers = new ArrayList();
}
public static void addProvider(ConfigurationProvider provider) {
INSTANCE.providers.add(provider);
}
...
Run Code Online (Sandbox Code Playgroud)
INSTANCE被宣布为final.为什么可以添加对象INSTANCE?不应该使final的使用无效.(它没有).
我假设答案必须用指针和内存做一些事情,但我想肯定知道.
在运行64位操作系统的MySQL中,每列占用至少64位?有点会占用整个字节?还是一整个字?
A类使用初始化列表将成员设置为参数值,而B类使用构造函数体内的赋值.
只要我保持一致,任何人都可以给出任何理由而不喜欢一个吗?
class A
{
String _filename;
A(String filename) : _filename(filename)
{
}
}
Run Code Online (Sandbox Code Playgroud)
class B
{
String _filename;
B(String filename)
{
_filename = filename;
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个 UserControl,包含一个 FormView,包含一个 DropDownList。FormView 绑定到数据控件。
像这样:
<asp:FormView ID="frmEdit" DataKeyNames="MetricCode" runat="server" DefaultMode="Edit" DataSourceID="llbDataSource" Cellpadding="0" >
<EditItemTemplate>
<asp:DropDownList ID="ParentMetricCode" runat="server" SelectedValue='<%# Bind("ParentMetricCode") %>' />
</EditItemTemplate>
<asp:FormView>
Run Code Online (Sandbox Code Playgroud)
我正在尝试从代码隐藏填充 DropDownList。如果这不包含在 FormView 中,我通常只会在 Page_Load 事件中执行它。但是,这在 FormView 中不起作用,只要我尝试这样做,访问代码中的下拉列表,即:
theListcontrol = CType(formView.FindControl(listControlName), ListControl)
Run Code Online (Sandbox Code Playgroud)
...调用FormView的数据绑定机制,当然,它试图将DropDownList绑定到底层数据源,导致**'ParentMetricCode'有一个无效的SelectedValue,因为它不存在于列表中项目。“参数名称:值...”错误,因为尚未填充 DropDownList。
我尝试在 FormView 的 DataBinding() 事件中执行加载,但是:
theListcontrol = CType(formView.FindControl(listControlName), System.Web.UI.WebControls.ListControl)
Run Code Online (Sandbox Code Playgroud)
...失败,因为此时 FormView.Controls.Count = 0。
这是不可能的吗?(我不想使用辅助 ObjectDataSource 将下拉列表绑定到)
我正在尝试诊断此异常:
System.Runtime.InteropServices.COMException (0x80070008): Not enough storage is available to process this command. (Exception from HRESULT: 0x80070008)
at System.Runtime.Remoting.RemotingServices.AllocateUninitializedObject(RuntimeType objectType)
at System.Runtime.Remoting.RemotingServices.AllocateUninitializedObject(Type objectType)
at System.Runtime.Remoting.Activation.ActivationServices.CreateInstance(Type serverType)
at System.Runtime.Remoting.Activation.ActivationServices.IsCurrentContextOK(Type serverType, Object[] props, Boolean bNewObj)
at Oracle.DataAccess.Client.CThreadPool..ctor()
at Oracle.DataAccess.Client.OracleCommand.set_CommandTimeout(Int32 value)
...
Run Code Online (Sandbox Code Playgroud)
看起来任何正常类型的"存储"都没有达到任何限制.该应用程序使用大约400MB的内存,70个线程,2000个句柄,硬盘驱动器有许多GB免费.该机器运行Windows 2003 Enterprise Server 32位,内存为16GB,因此内存不应成为问题.
应用程序作为Windows服务运行,因此没有使用GDI对象.耗尽GDI句柄是此异常的常见原因.
数据库连接,命令和阅读器都使用块包装,因此应该正确清理它们.
更新:将我们使用的线程数从12减少到4似乎解决了这个问题.在我们持续4到8小时之前,我们设法在没有错误的情况下运行超过24小时. UPDATE2:我从未弄清楚我们用尽了什么资源,但减少线程数似乎已经解决了问题.或至少隐藏它.
任何人都可以告诉我为什么以下转换导致编译时错误:
Long l = (Long)Math.pow(5,2);
Run Code Online (Sandbox Code Playgroud)
但为什么不是以下内容:
long l = (long)Math.pow(5,2);
Run Code Online (Sandbox Code Playgroud)