我在日志中收到一些错误消息
[User Defaults] Failed to write value for key GameId in CFPrefsPlistSource<0x1740faf00> (Domain: xxx.xxxxxx, User: kCFPreferencesCurrentUser, ByHost: No, Container: (null)): Path not accessible, switching to read-only
[User Defaults] attempt to set <private> for key in <private> in read-only (due to a previous failed write) preferences domain CFPrefsPlistSource<0x1740faf00> (Domain: xxx.xxxxxx, User: kCFPreferencesCurrentUser, ByHost: No, Container: (null))
Run Code Online (Sandbox Code Playgroud)
是什么导致这个?
这就是我的用法NSUserDefaults:
- (NSString *)gameId
{
if (_gameId)
return _gameId;
_gameId = [[NSUserDefaults standardUserDefaults] objectForKey:@"GameId"];
return _gameId;
}
- (void)setGameId:(NSString *)aGameId
{
_gameId …Run Code Online (Sandbox Code Playgroud) 我尝试了很多选项,但找不到解决这个问题的方法.我创建了一个Core Data文件并命名了实体Account,创建了一个名为username的字符串属性.然后将实体的类编辑为NSManagedObject,不确定这是否正确.现在,以下代码在我的LoginViewController中:
- (void)viewDidLoad
{
[super viewDidLoad];
ITAppDelegate *appDelegate = (ITAppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = appDelegate.managedObjectContext;
Account *newAccount = [NSEntityDescription insertNewObjectForEntityForName:@"Account" inManagedObjectContext:context];
[newAccount setValue:@"Jorge" forKey:@"username"];
[newAccount setPassword:@"password"];
NSLog(@"username:%@ password: %@", [newAccount username], [newAccount password]);
}
Run Code Online (Sandbox Code Playgroud)
我按照本教程,我的代码文件如下所示:
ITAppDelegate.h
#import <UIKit/UIKit.h>
@interface ITAppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
@end
Run Code Online (Sandbox Code Playgroud)
ITAppDelegate.m
#import "ITAppDelegate.h"
#import "LoginViewController.h"
@implementation ITAppDelegate
@synthesize …Run Code Online (Sandbox Code Playgroud) setFinishedSelectedImage:withFinishedUnselectedImage:在iOS7中已弃用.苹果公司建议使用的制定者image和selectedImage 同UIImageRenderingModeAlwaysOriginal来代替.我找不到任何如何使用的例子UIImageRenderingModeAlwaysOriginal.所以问题很简单:如何UITabBarItem在iOS7中设置图像?
在Swift 4中,我们可以使用
var md5: String? {
guard let data = self.data(using: .utf8) else { return nil }
let hash = data.withUnsafeBytes { (bytes: UnsafePointer<Data>) -> [UInt8] in
var hash: [UInt8] = [UInt8](repeating: 0, count: Int(CC_MD5_DIGEST_LENGTH))
CC_MD5(bytes, CC_LONG(data.count), &hash)
return hash
}
return hash.map { String(format: "%02x", $0) }.joined()
}
Run Code Online (Sandbox Code Playgroud)
但是在Swift 5中withUnsafeBytes使用UnsafeRawBufferPointer代替UnsafePointer。如何改变md5功能?
我想创建NSFetchRequest和设置属性以获取如下:
request.propertiesToFetch = @[@"a", @"b", @"c"];
Run Code Online (Sandbox Code Playgroud)
其中a和b存储在Core Data数据库中,并且c是瞬态的.executeFetchRequest:发出错误Invalid keypath c passed to setPropertiesToFetch:.但如果我取消选中属性的transient-checkbox,c一切都会正常工作.那么获取瞬态属性真的不可能,或者我做错了什么?
我想对Core Data使用多线程.我在NSManageObjects中解析xml文件.我使用下面的代码,我得到运行时错误Can only use -performBlock: on an NSManagedObjectContext that was created with a queue.怎么了?
//xmlParser
- (void)main
{
dispatch_queue_t queueB = dispatch_queue_create("Create Books", NULL);
dispatch_async(queueB, ^{
// Opening xml
// ...
NSManagedObjectContext* context = [[NSManagedObjectContext alloc] init];
[context setPersistentStoreCoordinator:mainContext].persistentStoreCoordinator];
[context performBlock:^{
// ...
[self _parseNode:container_node appendTo:books inContext:context];
// ...
NSError* error = nil;
[context save:&error];
[mainContext performBlock:^{
NSError* parentError = nil;
[mainContext save:&parentError];
}];
}];
[context release];
});
dispatch_release(queueB);
}
- (int)_parseNode:(axlNode*)inode appendTo:(NSMutableArray*)ioarray inContext:(NSManagedObjectContext*)context
{
// …Run Code Online (Sandbox Code Playgroud) multithreading core-data objective-c grand-central-dispatch ios
我想为我的应用程序支持iOS 8和iOS 9系统.也许iOS 7.我们知道,iOS 7和8的系统字体是Helvetica Neue.但在iOS 9系统中,字体是San-Francisco.如果您没有明确地设置Helvetica字体[UIFont fontWithName:@"HelveticaNeue" size:15];,但是使用[UIFont systemFontOfSize:15];,您将自动获得适用于iOS 7和8的Helvetica以及适用于iOS 9的San-Francisco.这太棒了!对于界面构建器的标签和按钮,您可以设置薄,超薄,中等系统字体.它也很棒.但是如何以编程方式在代码中设置这些超薄,超,中等系统字体?我是否需要为iOS 9和之前的iOS创建一个带分叉的类别?
我有UITableView.我想添加一个UITextField上面的tableView,可以通过拉下tableView来访问它.我想通过拉取tableView来隐藏我的textField.我怎样才能做到这一点?这是我试过的:
[self.messagesTableView addSubview:self.messageField];
- (UITextField*)messageField
{
if (!_messageField)
{
_messageField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, self.messagesTableView.frame.size.width, kMessageFieldHeight)];
_messageField.autoresizingMask = UIViewAutoresizingFlexibleWidth;
_messageField.backgroundColor = [UIColor greenColor];
}
return _messageField;
}
- (void)scrollViewDidScroll:(UIScrollView*)scrollView
{
if (scrollView == self.messagesTableView)
{
CGRect newFrame = self.messagesTableView.frame;
newFrame.origin.y = self.messagesTableView.contentOffset.y + kMessageFieldHeight;
self.messagesTableView.frame = newFrame;
}
}
Run Code Online (Sandbox Code Playgroud) 我想用动画旋转我UIButton的M_PI/4。这是我的代码:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[UIView animateWithDuration:.5 animations:^{
self.closeButton.transform = CGAffineTransformMakeRotation(M_PI/4);
}];
}
Run Code Online (Sandbox Code Playgroud)
但这会使我的按钮框架损坏。动画之前的帧(260 0; 44 44)和动画之后的帧变成(250.887 -9.1127; 62.2254 62.2254). 我看到了这篇文章和其他一些文章,但我不明白,如何通过M_PI/2.