iOS自定义对象初始化错误

时间:2014-11-13 09:21:27

标签: ios objective-c iphone custom-object

我有一个自定义对象ProductCategory

.h文件:

#import <Foundation/Foundation.h>

@interface ProductCategory : NSObject

@property int productCategoryId;
@property NSString *name;
@property NSArray *children;
@property int parentCategoryId;


- (id)initWithId:(int)productCategoryId name:(NSString*)name;

- (id)initWithId:(int)productCategoryId name:(NSString*)name children:(NSArray*)chidren parentCategoryId:(int)parentCategoryId;

@end

.m文件:

#import "ProductCategory.h"

@implementation ProductCategory

- (id)init {
    if((self = [super init])) {
        self.parentCategoryId = 0;
    }

    return self;
}

- (id)initWithId:(int)productCategoryId name:(NSString*)name {
    if((self = [super init])) {
        self.productCategoryId = productCategoryId;
        self.name = name;
        self.parentCategoryId = 0;
    }

    return self;
}


- (id)initWithId:(int)productCategoryId name:(NSString*)name children:(NSArray*)chidren parentCategoryId:(int)parentCategoryId {
    if((self = [super init])) {
        self.productCategoryId = productCategoryId;
        self.name = name;
        self.children = chidren;
        self.parentCategoryId = parentCategoryId;
    }

    return self;
}

@end

这只是一个普通的物体,我做了100000次。问题是,有时该对象的实例返回"0 objects",有时会返回正确的对象。

例如,如果我执行此操作ProductCategory *category = [[ProductCategory alloc]init];有时会返回ProductCategory实例,有时会返回"0 objects",因此我无法为此对象分配任何值。

enter image description here

我想这应该是非常愚蠢的东西,但我没有看到它。

2 个答案:

答案 0 :(得分:4)

解决问题的方法:

重启XCode。

为什么会这样?:

Apple应该回答这个问题。

使用XCode一段时间后内存问题似乎是垃圾。

如果你陷入困境,可以采取行动

@HotLicks关于使用import wx class MenuCallback(wx.Frame): def __init__(self, *args, **kwds): self.frame=wx.Frame.__init__(self, *args, **kwds) self.menubar = wx.MenuBar() menu1 = wx.Menu() menu_item_1 = menu1.Append(wx.ID_OPEN, "&File") menu_item_2 = menu1.Append(wx.ID_EXIT, "&Exit...") #Build a list of things via another function or just a declaration self.list_of_things = ["Thing No 1", "Thing No 2", "Thing No 3"] list_used = wx.Menu() thing_count = 101 for thing in self.list_of_things: t1 = wx.MenuItem(list_used, thing_count, thing) list_used.AppendItem(t1) thing_count +=1 thing_end = wx.MenuItem(list_used,199,'End of List') list_used.AppendItem(thing_end) menu1.AppendMenu(wx.ID_FILE,'&Things',list_used) self.menubar.Append(menu1, "&File") self.SetMenuBar(self.menubar) # Create bindings for the Thing list i_count = 101 for i in self.list_of_things: self.Bind(wx.EVT_MENU, self.OnThingOpen, id=i_count) i_count = i_count + 1 self.Bind(wx.EVT_MENU, self.OnThingEnd, id=199) self.Bind(wx.EVT_MENU, self.OnClose, id=wx.ID_EXIT) self.Show(True) def OnThingOpen(self, event): id_index = 101 id_selected = event.GetId() id_selected = id_selected - id_index print "Option =", id_selected print "Thing selected =", str(self.list_of_things[id_selected]) def OnThingEnd(self, event): id_selected = event.GetId() print "Option =", id_selected def OnClose(self, event): self.Close() if __name__ == '__main__': app = wx.App() MC=MenuCallback(parent=None, id=-1) app.MainLoop() NSLog的建议是正确的,以确保该对象的状态。

此外,您可以在断点后使用调试器窗口中的po命令调用方法并读取相关对象的属性。

答案 1 :(得分:0)

zevarito走在正确的轨道上。更多似乎解决了长期恼人的问题:

关闭项目。

Xcode - &gt;窗口 - &gt;项目 对于有问题的项目(以及所有其他项目可能是一个很好的清理房屋的想法),请点击派生数据 - &gt;删除。

关闭Xcode。 关闭模拟器。

重新启动Xcode并恢复正在进行的操作。