模型定义
class SeqNumbers(ndb.Model):
"""APNS Server -- SeqNumbers object that stores sequence number of stored messages between two devices"""
SeqNumberStart = ndb.IntegerProperty(required=True)
SeqNumberEnd = ndb.IntegerProperty(required=True)
Sourcein = ndb.StringProperty
Destin = ndb.StringProperty
Run Code Online (Sandbox Code Playgroud)
要添加到数据存储区的代码.这导致TypeError:无法设置非属性Sourcein(帖子末尾的完整错误)
任何帮助理解正在发生的事情将不胜感激.
data ={}
data['SeqNumberStart']=0
data['SeqNumberEnd']=0
data['key']=seqKey
data['Sourcein']='user_IOT'
data['Destin']='user_SmartHome'
SeqNumbers(**data).put()
Run Code Online (Sandbox Code Playgroud)
GAE日志中的完全错误
E 02:08:17.725 Encountered unexpected error from ProtoRPC method implementation: TypeError (Cannot set non-property Sourcein)
Traceback (most recent call last):
File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/protorpc-1.0/protorpc/wsgi/service.py", line 181, in protorpc_service_app
response = method(instance, request)
File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/endpoints-1.0/endpoints/api_config.py", line 1332, in invoke_remote
return remote_method(service_instance, request)
File …Run Code Online (Sandbox Code Playgroud) 假设我有一个定义为的属性@property (copy) NSString *name。
假设我有init如下定义的方法。
-(instancetype) initWithName:(NSString *)name
{
self = [super init];
if (self)
{
_name = [name copy]; //Do I need this copy or will ARC do it automatically?
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
我是否需要注释行中的副本,或者ARC将copy像在综合设置器中一样,根据属性声明中的进行处理?
当我试图将C结构存储到NSArray时,我遇到了一个错误(我能够通过转换为NSData来解决它,如下面链接中所指定的).但是,我很想知道为什么没有使用NSData的麻烦就行不通. 链接到我使用的解决方案
请注意:我不想要解决方案,它已经解决了.我只是想通过理解为什么下面的直接方法不起作用来提高我对Objective-C基础的理解.
我想做的事情:一个简单的程序,允许一个人添加一个杂货项目,并在添加到购物车后将其标记为已完成
使用3个元素定义C结构(item,count和BOOL的名称,以跟踪它是否已添加到购物车)
每次创建新项目时,我都会执行以下groceryItem*secondGroceryItem = malloc(sizeof(groceryItem)); secondGroceryItem-> itemName ="Beer"; secondGroceryItem-> count = 3; secondGroceryItem-> purchase = NO;
然后我将它添加到NSMutableArray使用[myGroceryList addObject:(__ bridge id)(secondGroceryItem)]跟踪杂货项目
其中myGroceryList早先定义为NSMutableArray*myGroceryList = [NSMutableArray array];
这不起作用.我必须在存储在NSMutableArray之前转换为NSData.为什么我不能直接在NSMutableArray中存储指向我的C结构的指针?
假设我有一个实现的方法,比如XXX,它当前不带参数,并使用硬编码参数操纵一些数据.
我在我的代码中的多个位置调用此方法.
现在我想添加一些灵活性,其中方法采用确定参数的参数而不是使用硬编码值.但我仍然希望我现有的代码能够运行.基本上,我想通过添加一个参数来修改方法,并说如果在没有参数的情况下调用方法,则假设硬编码值.
看起来唯一的方法是复制代码并创建一个新方法.即原始的两个方法和没有参数的新方法.有没有其他方法可以做到这一点,而无需重复代码?