如何检查视图是否有标记?

时间:2015-09-15 09:00:03

标签: ios objective-c if-statement null

帮助我解决这个意想不到的麻烦。

if (view.tag != nil)

^^这对我有用,但突然我给视图分配了0个标签,现在一切都坏了。

如何查看视图是否已分配标记?

由于

3 个答案:

答案 0 :(得分:6)

  

所有视图都有标记。默认为零0

这取决于你拥有的东西。我相信您应该考虑标记为0的视图是未标记的视图。并从1开始标记。

由于视图的tag属性属于NSInteger,因此不能为nilNSInteger是原始类型,因此不能有nil指针。分配给该属性的默认值为0

此外,当您将nil与0进行比较时,它在objective-c中给出YES。这是什么打破了你的逻辑。

if (view.tag != nil)相当于if (view.tag != 0)

答案 1 :(得分:0)

标签是非负值。如果您没有设置视图的标记,那么它的默认标记为0.因此,您始终有一个与视图关联的标记。

在这方面,如果你设置标签> 0,那么你可以检查

TimerTimer.Timer(Sender: TObject);
begin
    if downloaddata.Status = TTaskStatus.Running then
    begin
    //If it is already running don't start it again
        Exit;
    end;

    downloaddata := TTask.Create (procedure ()
    var //Create Thread var here
        MyConnection : TFDConnection;
        MyQuery : TFDQuery;
    begin
        //Do all your Query logic in here

        //If you need to do any UI related modifications
         TThread.Synchronize(TThread.CurrentThread,procedure()
            begin 
                //Remeber to wrap them inside a Syncronize
            end);
     //If you have Query variables and this is running on mobile with ARC 
     //remember to set their connection :  properties to nil to avoid memory leaks
     //http:stackoverflow.com/questions/32010583/what-happens-to-database-connection-objectsmydac-tmyconnection-under-arc
    MyQuery.connection := nil
end);
downloaddata.start

}

但你无法检查

if(tag>0){
  //do something
}else{
 //this is not your view

答案 2 :(得分:0)

有几点需要了解:

  1. Tag是无符号整数,是原语类型,DNX Core 5用于测试未分配的对象类型。
  2. 编译器会在此上下文中将nil视为nil,这就是它没有"火"。
  3. 解决方案:

    1. 分配0
    2. 使用tag > 0进行测试。