【问题标题】:accessing objectatIndex in NSMutableArray访问 NSMutableArray 中的 objectatIndex
【发布时间】:2011-11-18 12:29:21
【问题描述】:

我想知道下面的行代码在目标C中是否有效

  if (dtDay < [m_array objectAtIndex:m_histCount-1]);

                       OR

  if (dtDay < [m_array objectAtIndex:i+1]);

这里的 m_array 是 NSMutableArray 类型.....

还有 这行代码

NSDate *date = [self getDate];

问候 兰吉特

【问题讨论】:

    标签: ios ios4 ios5


    【解决方案1】:
    [m_array objectAtIndex:m_histCount-1]
    

    [m_array objectAtIndex:i+1]
    

    会返回一个对象,你不能用

    但是,在您期望一个对象的任何情况下,直接从数组中获取它们都可以。这甚至有效:

    if([[[m_array objectAtIndex:i+1] date] timeIntervalSinceDate:[m_array objectAtIndex:m_histCount-1] < 0])
    

    也就是说,如果这些索引返回 NSDate 对象,它就可以工作。

    由于数组可以包含任何类型的对象,因此最好确保您获得的对象类型正确。

    编辑:

    事实证明,您可以将对象与 操作数进行比较,但这没有用。您正在比较它们的指针值,这只是一个非常随机的 id。这确实意味着您的行是有效的,我猜,但不是真的有用。

    来源:How to compare objects using operator < or > in Objective-C?

    【讨论】:

    • 评论被清除。讨论转移到the chat
    【解决方案2】:

    您可以将 NSDate 对象与 compare: laterDate: 或 earlyDate: 选择器进行比较

    NSComparisonResult result = [date1 compare:date2];
    NSDate* earlierDate = [date1 earlierDate:date2];
    NSDate* laterDate = [date1 laterDate:date2];
    

    您还可以一次性对整个 NSArray 日期进行排序:

    NSArray* sortedDateArray = [dateArray sortedArrayUsingSelector:@selector(compare:)];
    

    行:

    NSDate *date = [self getDate];
    

    如果 self 响应 getDate 选择器并返回 NSDate(或子类,这不太可能),则有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      相关资源
      最近更新 更多