我不明白为什么编译器要求在这个系统风格的UIBarButtonItem初始化程序中使用style参数的参数 - 它首先没有该参数.救命?这是Swift的错误吗?
class ExpensesViewController: UIViewController {
lazy var newExpenseBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: Selector("newExpenseBarButtonItemTapped:"))
func newExpenseBarButtonItemTapped() {
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个名为Field的自定义对象.我基本上用它来定义表单中的单个字段.
class Field {
var name: String
var value: Any?
// initializers here...
}
Run Code Online (Sandbox Code Playgroud)
当用户提交表单时,我验证每个Field对象以确保它们包含有效值.有些字段不是必需的,所以我有时会故意设置nil为这样的value属性:
field.value = nil
Run Code Online (Sandbox Code Playgroud)
当我使用if-let来确定字段是否为零时,这似乎会造成问题.
if let value = field.value {
// The field has a value, ignore it...
} else {
// Add field.name to the missing fields array. Later, show the
// missing fields in a dialog.
}
Run Code Online (Sandbox Code Playgroud)
我在上面的if-else中设置了断点,当field.value故意设置为nil时,它会通过if-let块,而不是else.但是,对于field.value我未初始化和未分配的字段,程序将转到else块.
我想打印出来field.value,并value在IF-让块内:
if let value = field.value {
NSLog("field.value: …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Autolayout并排放置两个标签 - 左侧标签是字段名称,而右侧标签是值.我正在用Visual Language Format编写约束.
但是,我不希望左侧标签超出其固有宽度,我希望正确的标签填充屏幕中的剩余宽度.我知道我只需要在左侧标签的固有宽度上分配更高的内容拥抱优先级,但是如何在VLF中写入内部宽度?
我期待我的VLF字符串看起来像这样:
H:|-20-[leftLabel(==intrinsicContentWidthGoesHere@1000)]-20-[rightLabel]-20-|
Run Code Online (Sandbox Code Playgroud) 我正在编写一个函数,给定一个类型,只需从磁盘中取消归档对象并将其作为该类型返回.这就是它的样子:
public class func objectWithFileName<T>(fileName: String, inFolder folder: NSSearchPathDirectory) -> T? {
// Build an NSURL var called fileURL based on the fileName and folder.
// ...
// If any object was found
if let object: AnyObject = NSKeyedUnarchiver.unarchiveObjectWithFile(fileURL.path!) {
// Attempt to return the object as an object of type T.
if let typedObject = object as? T {
return typedObject
}
}
return nil
}
Run Code Online (Sandbox Code Playgroud)
计划使用函数的方法是这样,它不起作用(我得到"不能专门化非泛型定义"):
if let user = MQFileManager.objectWithFileName<User>("User", inFolder: .DocumentDirectory) {
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能正确拉出它?
我正在编写一个iOS 8应用程序,用户可以从相机拍摄照片.我使用这个代码检查授权状态(这非常简单,我很确定每个人都这样做):
func showCameraImagePicker() {
let authorizationStatus = AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo)
switch authorizationStatus {
case .Authorized:
// ...
case .Denied:
// ...
case .Restricted:
// ...
case .NotDetermined:
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行应用程序时,它适用于首次运行时的授权状态.但是,如果我转到"设置"应用并更改授权状态,然后返回到应用程序,则执行相同的代码,就好像授权状态未更改一样.
例如,如果我最初允许相机访问,然后转到设置并禁用我的应用程序的相机,然后返回到应用程序,代码.Authorized仍然执行 - 它显示UIImagePickerController但现在有黑屏.当我终止应用程序并再次运行它时,.Denied运行代码.
如何让我的代码听取相机中权限的更改?
UPDATE
这真的很奇怪 - 我也碰巧有这个问题,UIImagePickerController显示相机射击的速度非常慢,而且只有在从Xcode调试时才会发生.我再次运行我的应用程序而没有将其连接到Xcode的调试器,并且在"设置"屏幕中更改"摄像机"权限工作,虽然它似乎重新启动了我的应用程序(应用程序从第一个屏幕重新开始,而不是在我停止之前从"设置"中更改权限).这是正常的吗?如何确保在发布版本中不会发生此错误?
我有一个现有的项目,我想使用CoreData.
创建项目后,CoreData.framework已经添加到我的Frameworks组中,它Link Binary With Libraries位于我的项目的Target - > Build Phases中.我创建这个项目时没有检查"使用核心数据" - 复选框甚至没有 - 只是在我的项目中.我使用Xcode版本4.6.3.
阅读教程,我去了我的App-Prefix.pch并添加了一个导入到CoreData.它现在看起来像这样:
#import <Availability.h>
#ifndef __IPHONE_5_0
#warning "This project uses features only available in iOS SDK 5.0 and later."
#endif
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
#import <Foundation/Foundation.h>
#endif
Run Code Online (Sandbox Code Playgroud)
然后,我在我的内容中添加了以下内容AppDelegate.h:
@property (readonly, nonatomic, strong) NSManagedObjectContext *managedObjectContext;
@property (readonly, nonatomic, strong) NSManagedObjectModel *managedObjectModel;
@property (readonly, nonatomic, strong) NSPersistentStoreCoordinator *persistentStoreCoordinator;
- (void)saveContext;
Run Code Online (Sandbox Code Playgroud)
现在,当我覆盖getter时managedObjectContext,Xcode会抛出一个错误:
使用未声明的标识符'_managedObjectContext'; 你的意思是'NSManagedObjectContext'?
这是我的getter方法AppDelegate.m: …
我有一个包含字典的对象JSONData.从头文件,以及将访问它的其他类,我希望此属性只是只读和不可变.
@interface MyObject : NSObject
@property (readonly, strong, nonatomic) NSDictionary *JSONData;
@end
Run Code Online (Sandbox Code Playgroud)
但是,我需要它readwrite和实现文件一样可变,就像这样,但这不起作用:
@interface MyObject ()
@property (readwrite, strong, nonatomic) NSMutableDictionary *JSONData;
@end
@implementation MyObject
// Do read/write stuff here.
@end
Run Code Online (Sandbox Code Playgroud)
我有什么办法可以强制执行我想要的那种抽象吗?我看了看其他的问题,虽然我已经知道如何使财产readonly从.h和readwrite从.m,我无法找到有关的可变性存在的差异.
我的类中有一个计算属性,它是一个可选元组:
var contents: (Int, Bool)?
Run Code Online (Sandbox Code Playgroud)
我想编写一个自定义设置器,但不知道如何单独引用元组组件。有谁知道?我已尝试以下方法,但它不起作用:
var contents: (Int colorNumber, Bool selected)? {
// getter & setter here...
}
Run Code Online (Sandbox Code Playgroud) 我有一个视图控制器,显示在我的应用程序的开头,以准备我正在使用Core Data的UIManagedDocument.问题:swift_unknownWeakRelease()当我在iOS 4.1的iPhone 4S设备上运行应用程序时,我一直在崩溃.这是代码:
class SetupViewController: UIViewController {
@IBOutlet weak var loadingView: UIActivityIndicatorView!
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
let document = SPRManagedDocument.sharedDocument()
document.prepareWithCompletionHandler {[unowned self] success in
if success {
self.dismissViewControllerAnimated(false, completion: nil)
} else {
self.loadingView.stopAnimating()
UIAlertView(title: "Error", message: "Categories can't be loaded.", delegate: nil, cancelButtonTitle: "OK").show()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我怀疑这个区块之间有一个强大的参考周期,self因为这是我唯一可以看到的可能发生的地方.确实如此,如果我将捕获列表更改[unowned self]为[weak self]或完全删除它(保持self对闭包内部的强引用),程序继续正常.当我在带有iOS 8的iPhone 5模拟器或带有iOS 7.1的5S模拟器上运行应用程序时,不会发生此错误.
如何以不同方式编写代码,以便在运行iOS 7.0+的所有设备上避免崩溃?我确信这unowned是正确的修饰符.我希望self在completionHandler完成之前仍然存在,所以weak感觉不对.如果有帮助,这是Debug …
我正试图在Android上实现一个简单的Facebook聊天应用程序.它允许用户登录,之后应用程序打开一个新的ListActivity枚举用户的在线联系人,点击一个项目,另一个Activity打开他们的对话将发生的地方.
调用用户登录的第一个屏幕MainActivity.它包含两个EditTexts:一个用于FB用户名,另一个用于密码.还有两个按钮:清除,清空EditTexts,然后单击确定,执行以下AsyncTask new LoginTask().execute():
class LoginTask extends AsyncTask<Void, Void, Void> {
private ProgressDialog loading;
@Override
protected void onPreExecute() {
loading = ProgressDialog.show(MainActivity.this, "", "Loading...");
}
@Override
protected Void doInBackground(Void... params) {
// setup XMPP connection
ConnectionConfiguration config = new ConnectionConfiguration(
"chat.facebook.com", 5222, "chat.facebook.com");
config.setDebuggerEnabled(true);
config.setSASLAuthenticationEnabled(true); // TRUE for fb
conn = new XMPPConnection(config);
try {
// attempt login
conn.connect();
SASLAuthentication.supportSASLMechanism("PLAIN", 0);
conn.login(login_field.getText().toString(),
pwd_field.getText().toString(), "");
Log.d("TRACE", "isAuthenticated? " + conn.isAuthenticated()); …Run Code Online (Sandbox Code Playgroud) ios ×9
cocoa-touch ×8
swift ×7
iphone ×5
cocoa ×3
objective-c ×3
android ×1
autolayout ×1
avfoundation ×1
core-data ×1
ipad ×1
optional ×1
smack ×1
xcode ×1